o
    y¬´\  ã                   @   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© úI/var/www/html/env/lib/python3.10/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 dkrd‰ˆ dd… ‰ nd‰tˆ ƒt|jƒkrGˆt|jƒu rGˆr:ˆr/J ‚‡‡fdd„}|  S ‡ ‡‡‡fdd„}|  S qˆS )	Néÿÿÿÿz**kwTé    Fc                     s   ˆˆ | Ž Ž S ©Nr   )Úargs)Úconvr   r   r   Úwrap_leg)   s   z%_wrap_fn_for_legacy.<locals>.wrap_legc                     s<   t tˆj| ƒƒ‰ ‡ fdd„ˆD ƒ} ˆrˆ| i |¤ŽS ˆ| Ž S )Nc                    s   g | ]}ˆ | ‘qS r   r   )Ú.0Úname©Úargdictr   r   Ú
<listcomp>0   s    z9_wrap_fn_for_legacy.<locals>.wrap_leg.<locals>.<listcomp>)ÚdictÚzipÚ	arg_names)r   Úkw)r   Údispatch_collectionr   Úhas_kwr   r   r   .   s
   )Úlegacy_signaturesÚlenr   ÚboolÚkeywords)r   r   Úargspecr
   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 r   r   )r   Úline©Úindentr   r   Ú	<genexpr><   s   € z_indent.<locals>.<genexpr>)ÚjoinÚsplit)Útextr)   r   r(   r   Ú_indent;   s   r.   c                 C   s˜   t d dd„ | jdd… D ƒ¡dƒ}| jr tdd„ | jD ƒƒ}nd }d}t| jƒd	kr/|d
7 }||r6d| nd|j| jr>d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*   A   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   r*   H   s
   € ÿ
ÿa  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) ...
é   zð
# 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) ...
z (arguments as of %s)Ú ú, **kwú, )Úcurrent_sinceÚ
event_nameÚhas_kw_argumentsÚnamed_event_argumentsÚexample_kw_argÚsample_target)r.   r+   r   r    Úmaxr!   Ú__name__r   )r   r9   r   r8   r4   r-   r   r   r   Ú_standard_listen_example?   s8   
þû
þÿ
ÿ

ÿ
ø
r<   c              	   C   sD   d}| j D ]\}}}|d||j| jrdndd |¡|dœ 7 }q|S )Nr1   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 **kwr3   )r
   r5   r6   r7   r9   )r    r;   r   r+   )r   r9   r   r-   r
   r   r   r   r   r   Ú_legacy_listen_examplesp   s   ÿùùÿr=   c                 C   s@   |j d \}}}d|| j|jd |j¡|jrddœ S 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.r3   r2   r1   )r
   Úclsnamer5   r7   r6   )r    r;   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r(|tt| ||ƒdƒ7 }|t|| ƒ7 }t |j|d¡S )Nz@.. container:: event_signatures

     Example argument forms::

Ú_target_class_docÚobjz        é   )	Úgetattrr.   r<   r    r=   r@   r   Úinject_docstring_textÚ__doc__)r   r?   r   Úheaderr9   r-   r   r   r   Ú_augment_fn_docs›   s    ÿ
þ
þÿrH   r   )
rF   r1   r   r   r%   r.   r<   r=   r@   rH   r   r   r   r   Ú<module>   s   

!1