
    g#                        d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lm	Z	 d
dl
mZ d
dl
mZ ddlmZ ddlmZ ej"                  rd
dlmZ d
dlmZ eeee   eedef      f   Z	 d	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 d dZ	 	 	 	 	 	 	 	 d!dZy)"zhRoutines to handle adaption of legacy call signatures,
generation of deprecation notes and docstrings.

    )annotationsN)Any)Callable)List)Optional)Tuple)Type   )_ET)_ListenerFnType   )util)FullArgSpec)_ClsLevelDispatch)_HasEventsDispatch.c                     d fd}|S )a_  legacy sig decorator


    :param since: string version for deprecation warning
    :param argnames: list of strings, which is *all* arguments that the legacy
     version accepted, including arguments that are still there
    :param converter: lambda that will accept tuple of this full arg signature
     and return tuple of new arg signature.

    c                j    t        | d      sg | _        | j                  j                  f       | S )N_legacy_signatures)hasattrr   append)fnargnames	convertersinces    V/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/event/legacy.pylegz_legacy_signature.<locals>.leg3   s6    r/0$&B!
$$eXy%AB	    )r   Callable[..., Any]returnr    )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J d	fd}|c S d 	fd}|c S  S )Nz**kwTr   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                 J    t        j                         J   |   S N)version)r   warn_deprecated)argskw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/   r0   argdictnameargs_from_dictr   dispatch_collectionr   has_kwr   r2   s        r   r3   z%_wrap_fn_for_legacy.<locals>.wrap_legg   sf    ((eD"3':'D'Dd#KLG@H%Igdm%IN%I!>8R88!>22	 &Js   A)r/   r   r0   r   r   r   )	legacy_signatureslenr/   boolvarkwr9   joinr7   clsname)
r;   r   argspecformatted_defr3   r   r1   r<   r   r2   s
   ``   @@@@@r   _wrap_fn_for_legacyrE   <   s    
 "5!F!F 1xB<6!F"~HFx=C--&DMM=
 3
 $((		-778"*M (//',,!	  !!z, ,  O3 3 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>v   s     @tVd]@s   )rA   split)textrL   s    `r   _indentrP   u   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 )NrG   c              3  *   K   | ]  }d d|iz    yw)z%(arg)s = kw['%(arg)s']argNr    )rJ   rS   s     r   rM   z+_standard_listen_example.<locals>.<genexpr>   s!      
 &4
s   r   r   z    c              3  (   K   | ]
  \  }}}|  y wrI   r    )rJ   r   r/   r1   s       r   rM   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)rP   rA   r7   r=   max__name__r<   )r;   rZ   r   rY   rU   rO   s         r   _standard_listen_exampler]   y   s    
 		 
*44Qq9
 	
 	N ,, 
%8%J%J
 

 	3 	 	7D#m3"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   rV   rW   rX   rZ   )r=   r\   r<   rA   )r;   rZ   r   rO   r   r/   r1   s          r   _legacy_listen_examplesr_      sl    
 D0BB 
tT7  kk299Gr)-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`)rB   rV   
param_nameN)r\   r9   )rJ   rb   r;   parent_dispatch_clss     r   rM   z-_version_signature_changes.<locals>.<genexpr>   s;      /  I2;;"5":":",/s   '*r&   r'   )r   rB   rV   rX   rW   )r=   r\   r9   rA   r7   r<   )rc   r;   r   r/   r1   s   ``   r   _version_signature_changesrd      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        r
   )	getattrrP   r]   r=   r_   rd   r   inject_docstring_text__doc__)r;   rc   r   headerrZ   rO   s         r   _augment_fn_docsrl      s    	  /1DeLMG !4mRH D ,,#$7K
 	

 	*!4
 	
 %%bjj$::r   rI   )r   strr   z	List[str]r   zOptional[Callable[..., Any]]r   z2Callable[[Callable[..., Any]], Callable[..., Any]])r;   _ClsLevelDispatch[_ET]r   r   rC   r   r   r   )rO   rm   rL   rm   r   rm   )r;   rn   rZ   r   r   r   r   rm   )r;   rn   rZ   rm   r   r   r   rm   )rc   Type[_HasEventsDispatch[_ET]]r;   rn   r   rm   )r;   rn   rc   ro   r   r   r   rm   )rj   
__future__r   typingr   r   r   r   r   r	   registryr   r   r'   r   util.compatr   TYPE_CHECKINGattrr   baser   rm   _LegacySignatureTyper!   rE   rP   r]   r_   rd   rl   r    r   r   <module>rx      s^   #         %  %	'( S$s)XhsCx6H-IIJ  /3 , 8	26/66 6 	6rA&/&& 	& 		&R/ 	 		86/ 	<;/;6; 	; 		;r   