ó
¿b›]c           @   sç   d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d	 l m	 Z	 d
 d „ Z
 d
 d „ Z d d „ Z d e d „ Z d „  Z d e d „ Z d „  Z d „  Z d d „ Z d d „ Z d S(   sS   Helpers related to deprecation of functions, methods, classes, other
functionality.iÿÿÿÿNi   (   t   compat(   t	   decorator(   t   inject_docstring_text(   t   inject_param_texti   (   t   exci   c         C   s   t  j |  t j d | ƒd  S(   Nt
   stacklevel(   t   warningst   warnR   t   SADeprecationWarning(   t   msgR   (    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   warn_deprecated   s    c         C   s   t  j |  t j d | ƒd  S(   NR   (   R   R   R   t   SAPendingDeprecationWarning(   R	   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   warn_pending_deprecation   s    t   __init__c            s/   d |  ˆ p d f ‰ ‡  ‡ ‡ f d †  } | S(   Ns   .. deprecated:: %s %st    c            s&   t  |  ˆ  t j ˆ t d ˆ  ƒ ˆ ƒ S(   Nt   func(   t   _decorate_cls_with_warningR   R   t   dict(   t   cls(   t   constructort   headert   message(    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   decorate    s    (    (   t   versionR   R   R   (    (   R   R   R   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   deprecated_cls   s    	c            sP   | r d |  ˆ p d f ‰  n d ‰  ˆ d k r: d ‰ n  ‡  ‡ f d †  } | S(   sá  Decorates a function and issues a deprecation warning on use.

    :param version:
      Issue version in the warning.

    :param message:
      If provided, issue message in the warning.  A sensible default
      is used if not provided.

    :param add_deprecation_to_docstring:
      Default True.  If False, the wrapped function's __doc__ is left
      as-is.  If True, the 'message' is prepended to the docs if
      provided, or sensible default if message is omitted.

    s   .. deprecated:: %s %sR   s$   Call to deprecated function %(func)sc            s&   t  |  t j ˆ t d |  j ƒ ˆ  ƒ S(   NR   (   t   _decorate_with_warningR   R   R   t   __name__(   t   fn(   R   R   (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR   E   s
    N(   t   None(   R   R   t   add_deprecation_to_docstringR   (    (   R   R   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt
   deprecated,   s    	c             sO   i  ‰  x0 ˆ j  ƒ  D]" \ } \ } } t | ƒ ˆ  | <q W‡  ‡ f d †  } | S(   s"  Decorates a function to warn on use of certain parameters.

    e.g. ::

        @deprecated_params(
            weak_identity_map=(
                "0.7",
                "the :paramref:`.Session.weak_identity_map parameter "
                "is deprecated."
            )

        )

    c            s  t  j |  ƒ } | j d  k	 r€ t t | j t | j ƒ t | j ƒ | j ƒ ƒ ‰ t ˆ ƒ j	 ˆ ƒ ‰  t ˆ ƒ j
 ˆ ƒ ‰ n d ‰  t ˆ ƒ ‰ t ‡  ‡ ‡ ‡ f d †  ƒ } |  j d  k	 rÈ |  j pË d } | rö t | d „  ˆ j ƒ  Dƒ ƒ } n  | |  ƒ } | | _ | S(   Nc            s   xB ˆ  D]: } | | ˆ | k r t  j ˆ | t j d d ƒq q Wx: ˆ D]2 } | | k rL t  j ˆ | t j d d ƒqL qL W|  | | Ž  S(   NR   i   (   R   R   R   R   (   R   t   argst   kwargst   m(   t   check_defaultst   check_kwt   defaultst   messages(    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   warneds   s    R   c         S   s5   i  |  ]+ \ } \ } } d  | | p' d f | “ q S(   s   .. deprecated:: %s %sR   (    (   t   .0t   paramR   R   (    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pys
   <dictcomp>‡   s   	(    (   R    t   inspect_getfullargspecR$   R   R   t   zipR   t   lent   sett   intersectiont
   differenceR   t   __doc__R   t   items(   R   t   specR&   t   doct	   decorated(   R%   t   specs(   R"   R#   R$   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR   d   s(     	(   R0   t   _sanitize_restructured_text(   R4   R(   R   R   R   (    (   R%   R4   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   deprecated_paramsP   s
    +c            sP   | r d |  ˆ p d f ‰  n d ‰  ˆ d k r: d ‰ n  ‡  ‡ f d †  } | S(   sE  Decorates a function and issues a pending deprecation warning on use.

    :param version:
      An approximate future version at which point the pending deprecation
      will become deprecated.  Not used in messaging.

    :param message:
      If provided, issue message in the warning.  A sensible default
      is used if not provided.

    :param add_deprecation_to_docstring:
      Default True.  If False, the wrapped function's __doc__ is left
      as-is.  If True, the 'message' is prepended to the docs if
      provided, or sensible default if message is omitted.
    s   .. deprecated:: %s (pending) %sR   s$   Call to deprecated function %(func)sc            s&   t  |  t j ˆ t d |  j ƒ ˆ  ƒ S(   NR   (   R   R   R   R   R   (   R   (   R   R   (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR   ­   s
    N(   R   (   R   R   R   R   (    (   R   R   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   pending_deprecation’   s    	c         C   s"   |  d  k r | St | ƒ |  Sd  S(   N(   R   R
   (   t   parameter_valuet   default_valuet   warning_text(    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   deprecated_option_value¸   s    
c         C   s   d „  } t  j d | |  ƒ S(   Nc         S   s5   |  j  d d ƒ \ } } | d k r1 | d 7} n  | S(   Ni   i   R   t   meths   ()(   R   R<   (   t   group(   R!   t   type_t   name(    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   replÁ   s    s   \:(\w+)\:`~?\.?(.+?)`(   t   ret   sub(   t   textR@   (    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR5   À   s    	c         C   sÝ   |  j  d  k	 r |  j  p d } | d  k	 rº | t d | ƒ ;} t | | d ƒ } t |  ƒ t k rŸ t |  j ƒ } | | d <t |  j |  j | ƒ }  | | } qº | |  _  t |  | ƒ } n  t	 |  | t
 | | | d  ƒ ƒ |  S(   NR   R   i   R/   (   R/   R   R   R   t   typet   __dict__R   t	   __bases__t   getattrt   setattrR   (   R   R   t   wtypeR   t   docstring_headerR2   t   clsdictt   constructor_fn(    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR   Ê   s     
	c            s§   t  ˆ  ƒ ‰  t ‡  ‡ f d †  ƒ } |  j d k	 r< |  j p? d } | d k	 ry | t d |  j ƒ ;} t | | d ƒ } n  | |  ƒ } | | _ ‡  ‡ f d †  | _ | S(   s=   Wrap a function with a warnings.warn and augmented docstring.c            s#   t  j ˆ  ˆ d d ƒ|  | | Ž  S(   NR   i   (   R   R   (   R   R   R    (   R   RI   (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR&   ê   s    R   R   i   c              s   t  j ˆ  ˆ d d ƒS(   NR   i   (   R   R   (    (   R   RI   (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   <lambda>÷   R   N(   R5   R   R/   R   R   R   R   t   _sa_warn(   R   RI   R   RJ   R&   R2   R3   (    (   R   RI   s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyR   å   s    	(   R/   RA   R   R   R    t   langhelpersR   R   R   R   R
   R   R   R   t   TrueR   R6   R7   R;   R5   R   R   (    (    (    s;   lib/python2.7/site-packages/sqlalchemy/util/deprecations.pyt   <module>	   s"   $	C%		