
    +h                     @    d Z ddlmZ ddZd Zd Zd Zd Zd	 Zd
 Z	y)zhRoutines to handle adaption of legacy call signatures,
generation of deprecation notes and docstrings.

   )utilNc                       fd}|S )Nc                 j    t        | d      sg | _        | j                  j                  f       | S )N_legacy_signatures)hasattrr   append)fnargnames	convertersinces    J/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/event/legacy.pylegz_legacy_signature.<locals>.leg   s6    r/0$&B!
$$eXy%AB	     )r   r
   r   r   s   ``` r   _legacy_signaturer      s     Jr   c           
         	  j                   D ]  \  d   dk(  rddd ndt              t        |j                        k(  s;t        |j                        u sSd j
                  ddj                   j                        rd	nd
d}d j                  d j
                  dd|d		rrJ 	fd}|c S  	fd}|c S  S )Nz**kwT    Fzdef (, , **kw )z The argument signature for the ".z+" event listener has changed as of version zl, and conversion for the old argument signature will be removed in a future release.  The new signature is ""c                  B    t        j                           |   S N)version)r   warn_deprecated)argsconvr	   r   warning_txts    r   wrap_legz%_wrap_fn_for_legacy.<locals>.wrap_leg;   s"    ((eDtT{++r   c                      t        j                  	       t        t        j                  |             }D cg c]  }||   	 } }r | i |S  |  S c c}w r   )r   r   dictzip	arg_names)
r    kwargdictnamer
   dispatch_collectionr	   has_kwr   r"   s
       r   r#   z%_wrap_fn_for_legacy.<locals>.wrap_legA   sc    ((eD"3':'D'Dd#KLG6>?dGDM?D?!42.!4y(	 @s   A)	legacy_signatureslenr    boolvarkwr*   joinr'   clsname)
r+   r	   argspecformatted_defr#   r
   r!   r,   r   r"   s
   ``   @@@@@r   _wrap_fn_for_legacyr5      s    !4!F!F 1xB<6!F"~HFx=C--&DMM=
 3

 $((		-778"*M (//',,!	  !!z, O) ) O_1b 	r   c                 V    dj                  fd| j                  d      D              S )N
c              3   (   K   | ]	  }|z     y wNr   ).0lineindents     r   	<genexpr>z_indent.<locals>.<genexpr>P   s     @tVd]@s   )r1   split)textr<   s    `r   _indentr@   O   s!    99@tzz$/?@@@r   c                 F   t        dj                  d | j                  dd D              d      }| j                  rt	        d | j                  D              }nd }d}||rd|z  nd	|j
                  | j                  rd
nd	dj                  | j                        ||dz  }|S )Nr7   c              3   *   K   | ]  }d d|iz    yw)z%(arg)s = kw['%(arg)s']argNr   )r:   rC   s     r   r=   z+_standard_listen_example.<locals>.<genexpr>U   s!      
 &4
s   r   r   z    c              3   (   K   | ]
  \  }}}|  y wr9   r   )r:   r   r    r!   s       r   r=   z+_standard_listen_example.<locals>.<genexpr>\   s      
!tT 
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   r   r   )current_since
event_namehas_kw_argumentsnamed_event_argumentsexample_kw_argsample_target)r@   r1   r'   r-   max__name__r,   )r+   rJ   r	   rI   rE   r?   s         r   _standard_listen_examplerM   S   s    		 
*44Qq9
 	
 	N ,, 
%8%J%J
 

 	3 	 	 1=@kk(;(B(BH!%+>+H+H!I(&	 	D Kr   c           	          d}| j                   D ];  \  }}}|d||j                  | j                  rdnddj                  |      |dz  z  }= |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   rF   rG   rH   rJ   )r-   rL   r,   r1   )r+   rJ   r	   r?   r   r    r!   s          r   _legacy_listen_examplesrO   x   sn    D0BB 
tT7  kk&-- %,)-4!.	

& Kr   c                      j                   d   \  }}}d| j                  j                  dj                   fdj                  D              j
                  rddz  S ddz  S )Nr   a=  
.. versionchanged:: %(since)s
    The :meth:`.%(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   c              3   X   K   | ]!  }d j                   j                  |dz   # yw)z6:paramref:`.%(clsname)s.%(event_name)s.%(param_name)s`)r2   rF   
param_nameN)rL   r*   )r:   rR   r+   parent_dispatch_clss     r   r=   z-_version_signature_changes.<locals>.<genexpr>   s;      /  I2;;"5":":",/s   '*r   r   )r   r2   rF   rH   rG   )r-   rL   r*   r1   r'   r,   )rS   r+   r   r    r!   s   ``   r   _version_signature_changesrT      s    +==a@E4	+ *33-22%)YY / #6"?"?/ & -@,F,F
	
( MO
	
r   c                     d}t        |dd      }|t        t        | ||      d      z   }| j                  r)|t        t	        | ||      d      z  }|t        ||       z  }t        j                  |j                  |d      S )Nz@.. container:: event_signatures

     Example argument forms::

_target_class_docobjz           )	getattrr@   rM   r-   rO   rT   r   inject_docstring_text__doc__)r+   rS   r	   headerrJ   r?   s         r   _augment_fn_docsr]      s    	  /1DeLMG !4mRH D ,,#$7K
 	

 	*!4
 	
 %%bjj$::r   r9   )
r[   r   r   r   r5   r@   rM   rO   rT   r]   r   r   r   <module>r^      s5   
 2jA"J06;r   