3
vÅÏ^  ã               @   st   d dl Z d dl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 )é    Nc               @   s   e Zd ZdS )ÚRemovedInDjango31WarningN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú</usr/lib/python3.6/site-packages/django/utils/deprecation.pyr      s   r   c               @   s   e Zd ZdS )ÚRemovedInDjango40WarningN)r   r   r   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 j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   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f 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.
    c                sÖ   t ƒ j| |||ƒ}x¾tj|ƒD ]°}|j}x¤| jD ]š}|d }|jj|ƒ}	|d }
|jj|
ƒ}|d }t|f|žŽ }| r°|	r°t	j
d|||
f |dƒ t||
|	ƒ t||||	ƒƒ |	 r0|r0t||||ƒƒ q0W qW |S )Nr   é   r   z&`%s.%s` method should be renamed `%s`.)ÚsuperÚ__new__ÚinspectZgetmror   Úrenamed_methodsÚ__dict__Úgetr	   r   r   Úsetattr)ÚclsÚnameÚbasesZattrsÚ	new_classÚbaser
   Zrenamed_methodr   Z
old_methodr   Z
new_methodr   Úwrapper)Ú	__class__r   r   r   /   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 jd| j| jf | jdƒ tƒ j|ƒS )Nz%`%s` is deprecated, use `%s` instead.r   )r   r   r   Zalternativer   r   Ú__instancecheck__)r   Úinstance)r'   r   r   r+   M   s    
z*DeprecationInstanceCheck.__instancecheck__)r   r   r   r+   r)   r   r   )r'   r   r*   L   s   r*   c                   s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚMiddlewareMixinNc                s   || _ tƒ jƒ  d S )N)Úget_responser   r   )r   r.   )r'   r   r   r   V   s    zMiddlewareMixin.__init__c             C   s@   d }t | dƒr| j|ƒ}|p$| j|ƒ}t | dƒr<| j||ƒ}|S )NÚprocess_requestÚprocess_response)Úhasattrr/   r.   r0   )r   ZrequestZresponser   r   r   r   Z   s    


zMiddlewareMixin.__call__)N)r   r   r   r   r   r)   r   r   )r'   r   r-   U   s   r-   )r   r   ÚDeprecationWarningr   ÚPendingDeprecationWarningr   ZRemovedInNextVersionWarningr	   Útyper   r*   r-   r   r   r   r   Ú<module>   s   +	