o
    [h                     @   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 ~/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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Z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   Z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   r7   r   r6   r2   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 )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 **kwr1   )r
   r3   r4   r5   r7   )r   r9   r   r)   )r   r7   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.r1   r0   r/   )r
   Zclsnamer3   r5   r4   )r   r9   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::

Z_target_class_docobjz           )	getattrr,   r:   r   r;   r=   r   Zinject_docstring_text__doc__)r   r<   r   headerr7   r+   r   r   r   _augment_fn_docs   s    

rC   r   )
rA   r/   r   r   r#   r,   r:   r;   r=   rC   r   r   r   r   <module>   s   

!1