
    ,h#                        S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJ	r	  S
SK
Jr  S
SK
Jr  SSKJr  SSKJr  \R"                  (       a  S
SKJr  S
SKJr  \\\\   \\S\4      4   r S       SS jjr        SS jrSS jr        SS jr        SS jr      S S jr        S!S jrg)"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                    ^ ^^ SUUU 4S jjnU$ )aG  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                t   > [        U S5      (       d  / U l        U R                  R                  TTT45        U $ )N_legacy_signatures)hasattrr   append)fnargnames	convertersinces    O/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/event/legacy.pyleg_legacy_signature.<locals>.leg3   s9    r/00$&B!
$$eXy%AB	    )r   Callable[..., Any]returnr    )r   r   r   r   s   ``` r   _legacy_signaturer"   #   s       Jr   c           
       ^ ^^^^^^	 T R                    H  u  mmmTS   S:X  a  SmTSS mOSm[        T5      [        UR                  5      :X  d  M>  T[        UR                  5      L d  MX  ST R
                  < SSR                  T R                  5      < T(       a  S	OS
< S3nST R                  < ST R
                  < ST< SU< S3	m	Tb  T(       a   eSUUUU	4S jjnUs  $ SUU UUUU	4S jjnUs  $    T$ )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                 H   > [         R                  " TTS9  Tc   eT" T" U 6 6 $ N)version)r   warn_deprecated)argskwconvr   r   warning_txts     r   wrap_leg%_wrap_fn_for_legacy.<locals>.wrap_leg`   s.    ((eD+++tT{++r   c                    > [         R                  " T
T	S9  [        [        TR                  U 5      5      nT Vs/ s H  o2U   PM	     nnT(       a  T" U0 UD6$ T" U6 $ s  snf r-   )r   r/   dictzip	arg_names)r0   r1   argdictnameargs_from_dictr   dispatch_collectionr   has_kwr   r3   s        r   r4   r5   g   se    ((eD"3':'D'Dd#KLG@H%IdmN%I!>8R88!>22	 &Js   A)r0   r   r1   r   r    r   )	legacy_signatureslenr0   boolvarkwr;   joinr9   clsname)
r=   r   argspecformatted_defr4   r   r2   r>   r   r3   s
   ``   @@@@@r   _wrap_fn_for_legacyrG   <   s    
 "5!F!FxB<6!F"~HFx=C--&DMM=
 3
 $((		-778"*M (//',,!	  !!z, ,  O3 3 O_ "Gb 	r   c                X   ^ SR                  U4S jU R                  S5       5       5      $ )N
c              3  .   >#    U  H
  nTU-   v   M     g 7fNr!   ).0lineindents     r   	<genexpr>_indent.<locals>.<genexpr>v   s     @/?tVd]/?s   )rC   split)textrN   s    `r   _indentrS   u   s!    99@tzz$/?@@@r   c                d   [        SR                  S U R                  SS  5       5      S5      nU R                  (       a  [	        S U R                   5       5      nOS nSnUU(       a  SU-  OS	UR
                  U R                  (       a  S
OS	SR                  U R                  5      UUS.-  nU$ )NrI   c              3  0   #    U  H  nS SU0-  v   M     g7f)z%(arg)s = kw['%(arg)s']argNr!   )rL   rV   s     r   rO   +_standard_listen_example.<locals>.<genexpr>   s       
9 &49s   r   r   z    c              3  ,   #    U  H
  u  pnUv   M     g 7frK   r!   )rL   r   r0   r2   s       r   rO   rW      s      
%J!T %Js   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)rS   rC   r9   r?   max__name__r>   )r=   r^   r   r]   rY   rR   s         r   _standard_listen_examplera   y   s    
 		 
*44Qq9
 	
 	N ,, 
%8%J%J
 

 	3 	 	7D#m3"kk(;(B(BH!%+>+H+H!I(&	 	D Kr   c           	         SnU R                    H@  u  pEnUSUUR                  U R                  (       a  SOSSR                  U5      US.-  -  nMB     U$ )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   rZ   r[   r\   r^   )r?   r`   r>   rC   )r=   r^   r   rR   r   r0   r2   s          r   _legacy_listen_examplesrc      sf    
 D0BBT7  kk299Gr)-4!.	
 C& Kr   c                   ^ ^ TR                   S   u  p#nSUT R                  TR                  SR                  UU 4S jTR                   5       5      TR
                  (       a  SOS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  ^   >#    U  H"  nS TR                   TR                  US.-  v   M$     g7f)z6:paramref:`.%(clsname)s.%(event_name)s.%(param_name)s`)rD   rZ   
param_nameN)r`   r;   )rL   rf   r=   parent_dispatch_clss     r   rO   -_version_signature_changes.<locals>.<genexpr>   s>      / #@J I2;;"5":":", #@s   *-r'   r(   )r   rD   rZ   r\   r[   )r?   r`   r;   rC   r9   r>   )rg   r=   r   r0   r2   s   ``   r   _version_signature_changesri      sv     ,==a@E	+ *33-22%)YY / #6"?"?/ & -@,F,FB
	
r   c                   Sn[        USS5      nU[        [        XU5      S5      -   nU R                  (       a'  U[        [	        XU5      S5      -  nU[        X5      -  n[        R                  " UR                  US5      $ )Nz@.. container:: event_signatures

     Example argument forms::

_target_class_docobjz        r
   )	getattrrS   ra   r?   rc   ri   r   inject_docstring_text__doc__)r=   rg   r   headerr^   rR   s         r   _augment_fn_docsrq      s    	  /1DeLMG !4RH D ,,#$7K
 	

 	*
 	
 %%bjj$::r   rK   )r   strr   z	List[str]r   zOptional[Callable[..., Any]]r    z2Callable[[Callable[..., Any]], Callable[..., Any]])r=   _ClsLevelDispatch[_ET]r   r   rE   r   r    r   )rR   rr   rN   rr   r    rr   )r=   rs   r^   r   r   r   r    rr   )r=   rs   r^   rr   r   r   r    rr   )rg   Type[_HasEventsDispatch[_ET]]r=   rs   r    rr   )r=   rs   rg   rt   r   r   r    rr   )ro   
__future__r   typingr   r   r   r   r   r	   registryr   r   r(   r   util.compatr   TYPE_CHECKINGattrr   baser   rr   _LegacySignatureTyper"   rG   rS   ra   rc   ri   rq   r!   r   r   <module>r}      s^   #         %  %	'( S$s)XhsCx6H-IIJ  /3 , 8	26/66 6 	6rA&/&& 	& 		&R/ 	 		86/ 	<;/;6; 	; 		;r   