U
    ÌZj~  ã                   @   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© úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/event/legacy.pyÚleg   s    
z_legacy_signature.<locals>.legr   )r
   r   r	   r   r   r   r   Ú_legacy_signature   s    r   c                    sÊ   ˆj D ]¾\‰‰ ‰ˆ d dkr.d‰ˆ dd… ‰ nd‰tˆ ƒt|jƒkrˆt|jƒkrdˆjd ˆj¡ˆrjdnd	f }d
ˆjˆjˆ|f ‰ˆr¦ˆr’t	‚‡‡‡‡fdd„}n‡ ‡‡‡‡‡fdd„}|  S qˆS )Néÿÿÿÿz**kwTé    Fzdef %s(%s%s)ú, ú, **kwÚ zÁThe 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 )Nr   c                    s   g | ]}ˆ | ‘qS r   r   )Ú.0Úname©Z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   ÚboolÚvarkwr   Újoinr!   ÚclsnameÚAssertionError)r#   r   ZargspecZformatted_defr   r   )r   r   r#   r   r$   r
   r   r   Ú_wrap_fn_for_legacy   s6    ÿ

ýüüÿ	
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)Útextr1   r   r0   r   Ú_indentO   s    r5   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   r6   r   r   r   r2   U   s   ÿz+_standard_listen_example.<locals>.<genexpr>r   r   z    c                 s   s   | ]\}}}|V  qd S r.   r   )r   r
   r   r   r   r   r   r2   \   s   ÿzôfrom 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   r   r   )Úcurrent_sinceÚ
event_nameÚhas_kw_argumentsÚnamed_event_argumentsÚexample_kw_argÚsample_target)r5   r)   r!   r%   ÚmaxÚ__name__r$   )r#   r<   r   r;   r7   r4   r   r   r   Ú_standard_listen_exampleS   s0    
þûþ
ÿ	ÿ

ø
r?   c              	   C   sD   d}| j D ]4\}}}|d||j| jr(dndd |¡|dœ 7 }q
|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 **kwr   )r
   r8   r9   r:   r<   )r%   r>   r$   r)   )r#   r<   r   r4   r
   r   r   r   r   r   Ú_legacy_listen_examplesx   s    ÿùùÿr@   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.r   r   r   )r
   r*   r8   r:   r9   )r%   r>   r   r)   r!   r$   )Úparent_dispatch_clsr#   r
   r   r   r   r   r   Ú_version_signature_changes�   s    
ûúÿrB   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        é   )	Úgetattrr5   r?   r%   r@   rB   r   Zinject_docstring_textÚ__doc__)r#   rA   r   Úheaderr<   r4   r   r   r   Ú_augment_fn_docs£   s"    ÿ
þ
þ ÿrH   )N)
rF   r   r   r   r,   r5   r?   r@   rB   rH   r   r   r   r   Ú<module>   s   

5%