
    	i	!                       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 ddlmZ ej$                  rddlmZ ddlmZ  e
dedef         Z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 	 	 	 	 	 	 	 	 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)TypeVar   )_ET)_ListenerFnType   )util)FullArgSpec)_ClsLevelDispatch)_HasEventsDispatch_F.)boundc                     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    w/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/sqlalchemy/event/legacy.pylegz_legacy_signature.<locals>.leg6   s6    r/0$&B!
$$eXy%AB	    r   r   returnr    )r   r   r   r   s   ``` r   _legacy_signaturer$   &   s      Jr    c                    d| _         | S )NT)_omit_standard_example)r   s    r   r&   r&   ?   s     $BIr    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_legh   s.    ((eD+++tT{++r    c                     t        j                  
	       t        t        j                  |             }D cg c]  }||   	 }}r |i |S  | S c c}w r1   )r   r3   dictzip	arg_names)r4   r5   argdictnameargs_from_dictr   dispatch_collectionr   has_kwr   r7   s        r   r8   z%_wrap_fn_for_legacy.<locals>.wrap_lego   sf    ((eD"3':'D'Dd#KLG@H%Igdm%IN%I!>8R88!>22	 &Js   A)r4   r   r5   r   r"   r   )	legacy_signatureslenr4   boolvarkwr>   joinr<   clsname)
r@   r   argspecformatted_defr8   r   r6   rA   r   r7   s
   ``   @@@@@r   _wrap_fn_for_legacyrJ   D   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>~   s     @tVd]@s   )rF   split)textrQ   s    `r   _indentrU   }   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 )NrL   c              3  *   K   | ]  }d d|iz    yw)z%(arg)s = kw['%(arg)s']argNr#   )rO   rX   s     r   rR   z+_standard_listen_example.<locals>.<genexpr>   s!      
 &4
s   r   r   z    c              3  (   K   | ]
  \  }}}|  y wrN   r#   )rO   r   r4   r6   s       r   rR   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)rU   rF   r<   rB   max__name__rA   )r@   r_   r   r^   rZ   rT   s         r   _standard_listen_examplerb      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   r[   r\   r]   r_   )rB   ra   rA   rF   )r@   r_   r   rT   r   r4   r6   s          r   _legacy_listen_examplesrd      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`)rG   r[   
param_nameN)ra   r>   )rO   rg   r@   parent_dispatch_clss     r   rR   z-_version_signature_changes.<locals>.<genexpr>   s;      /  I2;;"5":":",/s   '*r+   r,   )r   rG   r[   r]   r\   )rB   ra   r>   rF   r<   rA   )rh   r@   r   r4   r6   s   ``   r   _version_signature_changesri      s     ,==a@E4	+ *33-22%)YY / #6"?"?/ & -@,F,F
	
( MO
	
r    c                N   t        |dd      r|j                  sJ |j                  S d}t        |dd      }|t        t        | ||      d      z   }| j                  r)|t        t        | ||      d      z  }|t        ||       z  }t        j                  |j                  |d      S )Nr&   Fz@.. container:: event_signatures

     Example argument forms::

_target_class_docobjz        r   )	getattr__doc__rU   rb   rB   rd   ri   r   inject_docstring_text)r@   rh   r   headerr_   rT   s         r   _augment_fn_docsrq      s    
 r+U3zzzzz	  /1DeLMG !4mRH D ,,#$7K
 	

 	*!4
 	
 %%bjj$::r    rN   )r   strr   z	List[str]r   zOptional[Callable[..., Any]]r"   zCallable[[_F], _F]r!   )r@   _ClsLevelDispatch[_ET]r   r   rH   r   r"   r   )rT   rr   rQ   rr   r"   rr   )r@   rs   r_   r   r   r   r"   rr   )r@   rs   r_   rr   r   r   r"   rr   )rh   Type[_HasEventsDispatch[_ET]]r@   rs   r"   rr   )r@   rs   rh   rt   r   r   r"   rr   )"rn   
__future__r   typingr   r   r   r   r   r	   r
   registryr   r   r,   r   util.compatr   TYPE_CHECKINGattrr   baser   r   rr   _LegacySignatureTyper$   r&   rJ   rU   rb   rd   ri   rq   r#   r    r   <module>r}      sv   #          %  %	'( T#s(+,S$s)Xc3h-??@  /3 , 	2
6/66 6 	6rA&/&& 	& 		&R/ 	 		86/ 	<;/;6; 	; 		;r    