Ë
    ðmxi	!  ã                  ó¬  — 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    €€€úN/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/event/legacy.pyÚlegz_legacy_signature.<locals>.leg6   s6   ø€ Ü�rÐ/Ô0Ø$&ˆBÔ!Ø
×Ñ×$Ñ$ e¨X°yÐ%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 )Néÿÿÿÿz**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ØÐ+Ð+Ð+Ù™t T˜{Ð+Ð+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Ñ'DÀdÓ#KÓL�GØ@HÖ%I¸ g¨d£mÐ%I�NÐ%IÙÙ! >Ð8°RÑ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Ø�M‰Mó=
ó 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   øè ø€ Ò@ t�V˜d•]Ñ@ùs   ƒ)rF   Úsplit)ÚtextrQ   s    `r   Ú_indentrU   }   s!   ø€ Ø�9‰9Ó@¨t¯z©z¸$Ó/?Ô@Ó@Ð@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   è ø€ ò 
á!��t˜Tô ñ
ùs   ‚zôfrom 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Ñ4°Q°qÐ9ô
ó 	
ð 	ó€Nð ×,Ò,Üñ 
à%8×%JÑ%Jô
ó 
‰ð
 ˆð	3ð 	ð 	á7DÐ# mÒ3È"à—k‘kØ(;×(BÒ(B™HÈØ!%§¡Ð+>×+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ò 
Ñˆˆt�TØð7ð Ø Ÿk™kà2×9Ò9‘G¸rà)-¯©°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Ñ@Ñ€Eˆ4�ð	+ð Ø*×3Ñ3Ø-×2Ñ2Ø%)§Y¡Yô /ð #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Ø�zŠzÐˆzØ�z‰zÐð	ð ô Ð/Ð1DÀeÓL€MØ”GÜ Ð!4°mÀRÓHØóñ €Dð ×,Ò,Ø”Ü#Ð$7¸ÈÓKØó
ñ 	
ˆð
 	Ô*ØÐ!4ó
ñ 	
ˆô ×%Ñ% b§j¡j°$¸Ó:Ð: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¡)¨X°c¸3°hÑ-?Ð?Ñ@Ð ð /3ðØðàðð ,ðð ó	ó2ð
6Ø/ð6àð6ð ð6ð ó	6órAð&Ø/ð&àð&ð 	ð&ð 	ó	&ðRØ/ðàðð 	ðð 	ó	ð8Ø6ðà/ðð 	óð<;Ø/ð;à6ð;ð 	ð;ð 	ô	;r    