B
    KLc~                 @   sN   d Z ddlmZ dddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dS )zhRoutines to handle adaption of legacy call signatures,
generation of deprecation notes and docstrings.

   )utilNc                s    fdd}|S )Nc                s&   t | dsg | _| j f | S )N_legacy_signatures)hasattrr   append)fn)argnames	convertersince 6lib/python3.7/site-packages/sqlalchemy/event/legacy.pyleg   s    
z_legacy_signature.<locals>.legr
   )r	   r   r   r   r
   )r   r   r	   r   _legacy_signature   s    r   c                s   xȈj D ]\  d dkr0d dd  ndt t|jkrt|jkrdjdjrldnd	f }d
jj|f rrt	fdd}n fdd}|S qW S d S )Nz**kwT    Fzdef %s(%s%s)z, z, **kw zThe argument signature for the "%s.%s" event listener has changed as of version %s, and conversion for the old argument signature will be removed in a future release.  The new signature is "%s"c                 s   t jd  |   S )N)version)r   warn_deprecated)args)convr   r	   warning_txtr
   r   wrap_leg;   s    z%_wrap_fn_for_legacy.<locals>.wrap_legc                 sJ   t jd ttj|   fddD } r>| |S |  S d S )N)r   c                s   g | ]} | qS r
   r
   ).0name)argdictr
   r   
<listcomp>D   s    z9_wrap_fn_for_legacy.<locals>.wrap_leg.<locals>.<listcomp>)r   r   dictzip	arg_names)r   kw)r   dispatch_collectionr   has_kwr	   r   )r   r   r   A   s    
)
legacy_signatureslenr   boolZvarkwr   joinr   clsnameAssertionError)r   r   ZargspecZformatted_defr   r
   )r   r   r   r   r    r	   r   r   _wrap_fn_for_legacy   s,    

	r'   c                s   d  fdd| dD S )N
c             3   s   | ]} | V  qd S )Nr
   )r   line)indentr
   r   	<genexpr>P   s    z_indent.<locals>.<genexpr>)r$   split)textr*   r
   )r*   r   _indentO   s    r.   c             C   s   t ddd | jdd D d}| jr@tdd | jD }nd }d}||rVd	| nd
|j| jrfdnd
d| j||d; }|S )Nr(   c             s   s   | ]}d d|i V  qdS )z%(arg)s = kw['%(arg)s']argNr
   )r   r/   r
   r
   r   r+   V   s   z+_standard_listen_example.<locals>.<genexpr>r   r   z    c             s   s   | ]\}}}|V  qd S )Nr
   )r   r	   r   r   r
   r
   r   r+   ]   s   zfrom sqlalchemy import event


@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) ...
z (arguments as of %s)r   z, **kwz, )current_since
event_namehas_kw_argumentsnamed_event_argumentsexample_kw_argsample_target)r.   r$   r   r!   max__name__r    )r   r5   r   r4   r0   r-   r
   r
   r   _standard_listen_exampleS   s(    

r8   c          	   C   sH   d}x>| j D ]4\}}}|d||j| jr*dndd||d 7 }qW |S )Nr   a&  
# 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) ...
z **kwz, )r	   r1   r2   r3   r5   )r!   r7   r    r$   )r   r5   r   r-   r	   r   r   r
   r
   r   _legacy_listen_examplesx   s    
r9   c             C   s:   |j d \}}}d|| j|jd|j|jr0dndd S )Nr   a>  
.. 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.z, z, **kwr   )r	   r%   r1   r3   r2   )r!   r7   r   r$   r   r    )parent_dispatch_clsr   r	   r   r   r
   r
   r   _version_signature_changes   s    
r;   c             C   s`   d}t |dd}|tt| ||d }| jrP|tt| ||d7 }|t|| 7 }t|j|dS )Nz@.. container:: event_signatures

     Example argument forms::

Z_target_class_docobjz           )	getattrr.   r8   r!   r9   r;   r   Zinject_docstring_text__doc__)r   r:   r   headerr5   r-   r
   r
   r   _augment_fn_docs   s    


rA   )N)
r?   r   r   r   r'   r.   r8   r9   r;   rA   r
   r
   r
   r   <module>   s   

5%