î

_ÝV‰  ã               @   s    d  d l  m Z d  d l Z d  d l Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z e Z Gd d „  d e	 ƒ Z
 Gd	 d
 „  d
 e ƒ Z Gd d „  d e ƒ Z d S)é    )Úabsolute_importNc               @   s   e  Z d  Z d S)ÚRemovedInDjango20WarningN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú:/tmp/pip-build-ghmbqnp_/Django/django/utils/deprecation.pyr      s   r   c               @   s   e  Z d  Z d S)ÚRemovedInDjango110WarningN)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                 s9   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 ‡  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  t |  ƒ j |  | | | ƒ } xt j | ƒ D]ð } | j } xÞ |  j D]Ó } | d } | j j | ƒ }	 | d }
 | j j |
 ƒ } | d } t	 | | Œ } | r÷ |	 r÷ t
 j d | | |
 f | d ƒ t | |
 |	 ƒ t | | | |	 ƒ ƒ n  |	 rJ | rJ t | | | | ƒ ƒ qJ qJ Wq1 W| S)Nr   é   r   z&`%s.%s` method should be renamed `%s`.)Úsuperr   Ú__new__ÚinspectZ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   1   s(    !	



!zRenameMethodsBase.__new__)r   r   r   Ú__doc__r   r   r   r   )r)   r   r   #   s   
r   c                   s"   e  Z d  Z ‡  f d d †  Z ‡  S)ÚDeprecationInstanceCheckc                s<   t  j d |  j |  j f |  j d ƒ t t |  ƒ j | ƒ S)Nz%`%s` is deprecated, use `%s` instead.r   )r   r   r   Úalternativer   r   r+   Ú__instancecheck__)r   Úinstance)r)   r   r   r-   O   s    z*DeprecationInstanceCheck.__instancecheck__)r   r   r   r-   r   r   )r)   r   r+   N   s   r+   )Ú
__future__r   r   r   ÚPendingDeprecationWarningr   ÚDeprecationWarningr	   ZRemovedInNextVersionWarningÚobjectr
   Útyper   r+   r   r   r   r   Ú<module>   s   +