o
    i                     @   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 R/var/www/edux/Edux_v2/venv/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 )	Nz**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varkw)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