o
    E6d	!                     @  s  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rWd
dlmZ d
dlmZ eeee eedef  f Z	d5d6ddZd7d#d$Zd8d'd(Zd9d+d,Zd:d-d.Zd;d1d2Zd<d3d4ZdS )=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.sincestrargnames	List[str]	converterOptional[Callable[..., Any]]return2Callable[[Callable[..., Any]], Callable[..., Any]]c                   s   d fd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.

    fnCallable[..., Any]r   c                   s&   t | dsg | _| j f | S )N_legacy_signatures)hasattrr   append)r   r   r   r    nC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\sqlalchemy/event/legacy.pyleg3   s   
z_legacy_signature.<locals>.legN)r   r   r   r   r   )r   r   r   r!   r   r   r    _legacy_signature#   s   r"   dispatch_collection_ClsLevelDispatch[_ET]r   r   argspecr   c                   s   j D ]f\  d dkrd dd  ndt t|jkrit|ju ridjdjr5dnd	f }d
jj|f d urYrKJ dfdd}|  S d fdd}|  S qS )Nz**kwTr   Fzdef %s(%s%s), , **kw zThe argument signature for the "%s.%s" event listener has changed as of version %s, and conversion for the old argument signature will be removed in a future release.  The new signature is "%s"argsr   kwr   c                    s&   t jd  d usJ  |   S )Nversion)r   warn_deprecated)r*   r+   )convr   r   warning_txtr   r    wrap_leg`   s   z%_wrap_fn_for_legacy.<locals>.wrap_legc                    sJ   t jd ttj|   fddD }r!|i |S | S )Nr,   c                   s   g | ]} | qS r   r   ).0nameZargdictr   r    
<listcomp>j   s    z9_wrap_fn_for_legacy.<locals>.wrap_leg.<locals>.<listcomp>)r   r.   dictzip	arg_names)r*   r+   Zargs_from_dict)r   r#   r   has_kwr   r0   r4   r    r1   g   s   )r*   r   r+   r   r   r   )	legacy_signatureslenr*   boolvarkwr3   joinr8   clsname)r#   r   r%   Zformatted_defr1   r   )r   r/   r#   r   r9   r   r0   r    _wrap_fn_for_legacy<   s:   

	r@   textindentc                   s   d  fdd| dD S )N
c                 3  s    | ]} | V  qd S Nr   )r2   linerB   r   r    	<genexpr>v   s    z_indent.<locals>.<genexpr>)r>   split)rA   rB   r   rF   r    _indentu   s   rI   sample_targetr   c                 C  s   t ddd | jdd D d}| jr tdd | jD }nd }d}||r+d	| nd
|j| jr3dnd
d| j||d; }|S )NrC   c                 s  s    | ]	}d d|i V  qdS )z%(arg)s = kw['%(arg)s']argNr   )r2   rK   r   r   r    rG      s
    

z+_standard_listen_example.<locals>.<genexpr>r   r   z    c                 s  s    | ]\}}}|V  qd S rD   r   )r2   r   r*   r/   r   r   r    rG      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_argrJ   )rI   r>   r8   r:   max__name__r9   )r#   rJ   r   rP   rL   rA   r   r   r    _standard_listen_exampley   s0   

	


rS   c              	   C  sD   d}| j D ]\}}}|d||j| jrdndd||d 7 }q|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   rM   rN   rO   rJ   )r:   rR   r9   r>   )r#   rJ   r   rA   r   r*   r/   r   r   r    _legacy_listen_examples   s   rT   parent_dispatch_clsType[_HasEventsDispatch[_ET]]c              	     sP    j d \}}}d|j jd fdd jD  jr#dd S dd 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  s$    | ]}d j  j|d V  qdS )z6:paramref:`.%(clsname)s.%(event_name)s.%(param_name)s`)r?   rM   
param_nameN)rR   r3   )r2   rW   r#   rU   r   r    rG      s    
z-_version_signature_changes.<locals>.<genexpr>r(   r)   )r   r?   rM   rO   rN   )r:   rR   r3   r>   r8   r9   )rU   r#   r   r*   r/   r   rX   r    _version_signature_changes   s    	rY   c                 C  s`   d}t |dd}|tt| ||d }| jr(|tt| ||d7 }|t|| 7 }t|j|dS )Nz@.. container:: event_signatures

     Example argument forms::

Z_target_class_docobjz        r	   )	getattrrI   rS   r:   rT   rY   r   Zinject_docstring_text__doc__)r#   rU   r   headerrJ   rA   r   r   r    _augment_fn_docs   s    

r^   rD   )r   r   r   r   r   r   r   r   )r#   r$   r   r   r%   r   r   r   )rA   r   rB   r   r   r   )r#   r$   rJ   r   r   r   r   r   )r#   r$   rJ   r   r   r   r   r   )rU   rV   r#   r$   r   r   )r#   r$   rU   rV   r   r   r   r   )r\   
__future__r   typingr   r   r   r   r   r   registryr
   r   r)   r   Zutil.compatr   TYPE_CHECKINGattrr   baser   r   Z_LegacySignatureTyper"   r@   rI   rS   rT   rY   r^   r   r   r   r    <module>   s2   

9

)
