ó
¿b›]c           @   s\   d  Z  d d l m Z d
 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 S(   sh   Routines to handle adaption of legacy call signatures,
generation of deprecation notes and docstrings.

i   (   t   utilc            s   ‡  ‡ ‡ f d †  } | S(   Nc            s8   t  |  d ƒ s g  |  _ n  |  j j ˆ ˆ  ˆ f ƒ |  S(   Nt   _legacy_signatures(   t   hasattrR   t   append(   t   fn(   t   argnamest	   convertert   since(    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   leg   s    (    (   R   R   R   R   (    (   R   R   R   s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _legacy_signature   s    c            sÅ   x¾ ˆ j  D]¯ \ } ‰  ‰ ˆ  d d k r? t ‰ ˆ  d d !‰  n t ‰ t ˆ  ƒ t | j ƒ k r
 ˆ t | j ƒ k r
 ˆ r ˆ sˆ t ‚ ‡ ‡ f d †  } n ‡  ‡ ‡ ‡ f d †  } | Sq
 Wˆ Sd  S(   Niÿÿÿÿs   **kwi    c             s   ˆ ˆ  |  Œ  Œ  S(   N(    (   t   args(   t   convR   (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   wrap_leg)   s    c             sV   t  t ˆ j |  ƒ ƒ } g  ˆ  D] } | | ^ q }  ˆ rH ˆ |  | Ž  Sˆ |  Œ  Sd  S(   N(   t   dictt   zipt	   arg_names(   R
   t   kwt   argdictt   name(   R   t   dispatch_collectionR   t   has_kw(    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyR   .   s
    (   t   legacy_signaturest   Truet   Falset   lenR
   t   boolt   varkwt   AssertionError(   R   R   t   argspecR   R   (    (   R   R   R   R   R   s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _wrap_fn_for_legacy   s    !c            s&   d j  ‡  f d †  |  j d ƒ Dƒ ƒ S(   Ns   
c         3   s   |  ] } ˆ  | Vq d  S(   N(    (   t   .0t   line(   t   indent(    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pys	   <genexpr><   s    (   t   joint   split(   t   textR    (    (   R    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _indent;   s    c         C   så   t  d j d „  |  j d d !Dƒ ƒ d ƒ } |  j rQ t d „  |  j Dƒ ƒ } n d  } d } t |  j ƒ d k r | d	 7} n  | i | r• d
 | n d d 6| j d 6|  j rµ d n d d 6d j |  j ƒ d 6| d 6| d 6;} | S(   Ns   
c         s   s    |  ] } d  i | d 6Vq d S(   s   %(arg)s = kw['%(arg)s']t   argN(    (   R   R%   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pys	   <genexpr>B   s   i    i   s       c         s   s   |  ] \ } } } | Vq d  S(   N(    (   R   R   R
   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pys	   <genexpr>I   s   s  from sqlalchemy import event

# standard decorator style%(current_since)s
@event.listens_for(%(sample_target)s, '%(event_name)s')
def receive_%(event_name)s(%(named_event_arguments)s%(has_kw_arguments)s):
    "listen for the '%(event_name)s' event"

    # ... (event handling logic) ...
i   sð   
# named argument style (new in 0.9)
@event.listens_for(%(sample_target)s, '%(event_name)s', named=True)
def receive_%(event_name)s(**kw):
    "listen for the '%(event_name)s' event"
%(example_kw_arg)s

    # ... (event handling logic) ...
s    (arguments as of %s)t    t   current_sincet
   event_names   , **kwt   has_kw_argumentss   , t   named_event_argumentst   example_kw_argt   sample_target(	   R$   R!   R   R   t   maxt   NoneR   t   __name__R   (   R   R,   R   R+   R'   R#   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _standard_listen_example?   s.    			
	
c         C   ss   d } xf |  j  D][ \ } } } | d i | d 6| j d 6|  j rH d n d d 6d j | ƒ d 6| d	 67} q W| S(
   NR&   s&  
# DEPRECATED calling style (pre-%(since)s, will be removed in a future release)
@event.listens_for(%(sample_target)s, '%(event_name)s')
def receive_%(event_name)s(%(named_event_arguments)s%(has_kw_arguments)s):
    "listen for the '%(event_name)s' event"

    # ... (event handling logic) ...
R   R(   s    **kwR)   s   , R*   R,   (   R   R/   R   R!   (   R   R,   R   R#   R   R
   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _legacy_listen_examplesp   s    
c         C   sb   | j  d \ } } } d i | d 6|  j d 6| j d 6d j | j ƒ d 6| j rY d n d	 d
 6S(   Ni    s>  
.. deprecated:: %(since)s
    The :class:`.%(clsname)s.%(event_name)s` event now accepts the 
    arguments ``%(named_event_arguments)s%(has_kw_arguments)s``.
    Support for listener functions which accept the previous 
    argument signature(s) listed above as "deprecated" will be 
    removed in a future release.R   t   clsnameR(   s   , R*   s   , **kwR&   R)   (   R   R/   R   R!   R   R   (   t   parent_dispatch_clsR   R   R
   R   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _version_signature_changesˆ   s    

c         C   s‹   d } t  | d d ƒ } | t t |  | | ƒ d ƒ } |  j ru | t t |  | | ƒ d ƒ 7} | t | |  ƒ 7} n  t j | j | d ƒ S(	   Ns@   .. container:: event_signatures

     Example argument forms::

t   _target_class_doct   objt    i   i   s           s           (	   t   getattrR$   R0   R   R1   R4   R    t   inject_docstring_textt   __doc__(   R   R3   R   t   headerR,   R#   (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   _augment_fn_docs›   s    
	
N(   R:   R&   R    R.   R	   R   R$   R0   R1   R4   R<   (    (    (    s6   lib/python2.7/site-packages/sqlalchemy/event/legacy.pyt   <module>   s   
	!		1		