U
    HaN                     @   s   d dl Z d dlZd dlZd dlmZ G dd deZG dd deZeZ	G dd dZ
G d	d
 d
eZG dd deZG dd dZdS )    N)sync_to_asyncc                   @   s   e Zd ZdS )RemovedInDjango40WarningN__name__
__module____qualname__ r   r   </tmp/pip-unpacked-wheel-3jxiddxt/django/utils/deprecation.pyr      s   r   c                   @   s   e Zd ZdS )RemovedInDjango41WarningNr   r   r   r   r	   r
      s   r
   c                   @   s   e Zd Zdd Zdd ZdS )warn_about_renamed_methodc                 C   s   || _ || _|| _|| _d S N)
class_nameold_method_namenew_method_namedeprecation_warning)selfr   r   r   r   r   r   r	   __init__   s    z"warn_about_renamed_method.__init__c                    s    fdd}|S )Nc                     s*   t djjjf jd  | |S )Nz(`%s.%s` is deprecated, use `%s` instead.   )warningswarnr   r   r   r   )argskwargsfr   r   r	   wrapped   s     z3warn_about_renamed_method.__call__.<locals>.wrappedr   )r   r   r   r   r   r	   __call__   s    z"warn_about_renamed_method.__call__N)r   r   r   r   r   r   r   r   r	   r      s   r   c                       s$   e Zd ZdZdZ fddZ  ZS )RenameMethodsBasea#  
    Handles the deprecation paths when renaming a method.

    It does the following:
        1) Define the new method if missing and complain about it.
        2) Define the old method if missing.
        3) Complain whenever an old method is called.

    See #15363 for more details.
    r   c                    s   t  | |||}t|D ]}|j}| jD ]}|d }|j|}	|d }
|j|
}|d }t|f| }|s|	rt	
d|||
f |d t||
|	 t||||	 |	s,|r,t|||| q,q|S )Nr      r   z&`%s.%s` method should be renamed `%s`.)super__new__inspectgetmror   renamed_methods__dict__getr   r   r   setattr)clsnamebasesattrs	new_classbaser   Zrenamed_methodr   Z
old_methodr   Z
new_methodr   wrapper	__class__r   r	   r   2   s.    
 zRenameMethodsBase.__new__)r   r   r   __doc__r"   r   __classcell__r   r   r-   r	   r   $   s   r   c                       s   e Zd Z fddZ  ZS )DeprecationInstanceCheckc                    s(   t d| j| jf | jd t |S )Nz%`%s` is deprecated, use `%s` instead.r   )r   r   r   alternativer   r   __instancecheck__)r   instancer-   r   r	   r3   P   s     z*DeprecationInstanceCheck.__instancecheck__)r   r   r   r3   r0   r   r   r-   r	   r1   O   s   r1   c                       sF   e Zd ZdZdZd fdd	Zdd Zdd Zd	d
 Zdd Z	  Z
S )MiddlewareMixinTNc                    s&   |  | || _|   t   d S r   )_get_response_none_deprecationget_response_async_checkr   r   r   r7   r-   r   r	   r   ^   s    
zMiddlewareMixin.__init__c                 C   s   t | jrt jj| _dS )z
        If get_response is a coroutine function, turns us into async mode so
        a thread is not consumed during a whole request.
        N)asyncioiscoroutinefunctionr7   Z
coroutinesZ_is_coroutine)r   r   r   r	   r8   d   s    zMiddlewareMixin._async_checkc                 C   sV   t | jr| |S d }t| dr.| |}|p:| |}t| drR| ||}|S )Nprocess_requestprocess_response)r:   r;   r7   	__acall__hasattrr<   r=   r   requestresponser   r   r	   r   n   s    



zMiddlewareMixin.__call__c                    sb   d}t | dr&t| jdd|I dH }|p8| |I dH }t | dr^t| jdd||I dH }|S )zh
        Async version of __call__ that is swapped in when an async request
        is running.
        Nr<   T)Zthread_sensitiver=   )r?   r   r<   r7   r=   r@   r   r   r	   r>   z   s$    


 
zMiddlewareMixin.__acall__c                 C   s   |d krt jdtdd d S )NzDPassing None for the middleware get_response argument is deprecated.   )
stacklevel)r   r   r   r9   r   r   r	   r6      s     z.MiddlewareMixin._get_response_none_deprecation)N)r   r   r   Zsync_capableZasync_capabler   r8   r   r>   r6   r0   r   r   r-   r	   r5   X   s   
r5   )r:   r    r   Zasgiref.syncr   DeprecationWarningr   PendingDeprecationWarningr
   ZRemovedInNextVersionWarningr   typer   r1   r5   r   r   r   r	   <module>   s   +	