o
    {,h                     @   s|   d dl Z d dlZd dlmZmZmZ G dd deZG dd deZ	eZ
e	ZG dd dZG d	d
 d
eZG dd dZdS )    N)iscoroutinefunctionmarkcoroutinefunctionsync_to_asyncc                   @      e Zd ZdS )RemovedInDjango60WarningN__name__
__module____qualname__ r   r   N/var/www/html/rh/venv/lib/python3.10/site-packages/django/utils/deprecation.pyr          r   c                   @   r   )RemovedInDjango61WarningNr   r   r   r   r   r      r   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  | i |S )Nz(`%s.%s` is deprecated, use `%s` instead.   )warningswarnr   r   r   r   )argskwargsfr   r   r   wrapper   s   z3warn_about_renamed_method.__call__.<locals>.wrapperr   )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 ]U}|j}| jD ]L}|d }|j|}	|d }
|j|
}|d }t|g|R  }|sV|	rVt	
d|||
f |d t||
|	 t||||	 |	sb|rbt|||| 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   renamed_methodr   
old_methodr   
new_methodr   r   	__class__r   r   r"   7   s2   
zRenameMethodsBase.__new__)r   r	   r
   __doc__r%   r"   __classcell__r   r   r2   r   r   )   s    r   c                       s<   e Zd ZdZdZ fddZdd Zdd Zdd	 Z  Z	S )
MiddlewareMixinTc                    s>   |d u rt d|| _t| j| _| jrt|  t   d S )Nzget_response must be provided.)
ValueErrorget_responser   
async_moder   r!   r   )r   r8   r2   r   r   r   Z   s   zMiddlewareMixin.__init__c                 C   s    d| j jt| jd| jj jf S )Nz<%s get_response=%s>r
   )r3   r
   getattrr8   r   )r   r   r   r   __repr__g   s   zMiddlewareMixin.__repr__c                 C   sP   | j r| |S d }t| dr| |}|p| |}t| dr&| ||}|S )Nprocess_requestprocess_response)r9   	__acall__hasattrr<   r8   r=   r   requestresponser   r   r   r   q   s   



zMiddlewareMixin.__call__c                    sd   d}t | drt| jdd|I dH }|p| |I dH }t | dr0t| jdd||I dH }|S )zh
        Async version of __call__ that is swapped in when an async request
        is running.
        Nr<   T)thread_sensitiver=   )r?   r   r<   r8   r=   r@   r   r   r   r>   }   s$   



zMiddlewareMixin.__acall__)
r   r	   r
   sync_capableasync_capabler   r;   r   r>   r5   r   r   r2   r   r6   V   s    
r6   )r#   r   asgiref.syncr   r   r   DeprecationWarningr   PendingDeprecationWarningr   RemovedInNextVersionWarningRemovedAfterNextVersionWarningr   typer   r6   r   r   r   r   <module>   s    -