o
    =a~                     @   sN   d Z ddlmZ dddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dS )zhRoutines to handle adaption of legacy call signatures,
generation of deprecation notes and docstrings.

   )utilNc                    s    fdd}|S )Nc                    s&   t | dsg | _| j f | S )N_legacy_signatures)hasattrr   append)fnargnames	convertersince M/var/www/html/gps/gps/lib/python3.10/site-packages/sqlalchemy/event/legacy.pyleg   s   
z_legacy_signature.<locals>.legr   )r
   r   r	   r   r   r   r   _legacy_signature   s   r   c                    s   j D ]b\  d dkrd dd  ndt t|jkret|ju redjdjr5dnd	f }d
jj|f rVrIJ fdd}|  S  fdd}|  S qS )Nz**kwT    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"c                     s   t jd  |   S )Nversion)r   warn_deprecated)args)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argdictr   r   
<listcomp>D   s    z9_wrap_fn_for_legacy.<locals>.wrap_leg.<locals>.<listcomp>)r   r   dictzip	arg_names)r   kw)r   dispatch_collectionr   has_kwr
   r   r   r   r   A   s   )	legacy_signatureslenr   boolvarkwr   joinr"   clsname)r$   r   argspecformatted_defr   r   )r   r   r$   r   r%   r
   r   r   _wrap_fn_for_legacy   s:   

	r.   c                    s   d  fdd| dD S )N
c                 3   s    | ]} | V  qd S Nr   )r   lineindentr   r   	<genexpr>P   s    z_indent.<locals>.<genexpr>)r*   split)textr3   r   r2   r   _indentO   s   r7   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 )Nr/   c                 s   s    | ]	}d d|i V  qdS )z%(arg)s = kw['%(arg)s']argNr   )r   r8   r   r   r   r4   U   s
    

z+_standard_listen_example.<locals>.<genexpr>r   r   z    c                 s   s    | ]\}}}|V  qd S r0   r   )r   r
   r   r   r   r   r   r4   \   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)r7   r*   r"   r&   max__name__r%   )r$   r>   r   r=   r9   r6   r   r   r   _standard_listen_exampleS   s0   

	


rA   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
   r:   r;   r<   r>   )r&   r@   r%   r*   )r$   r>   r   r6   r
   r   r   r   r   r   _legacy_listen_examplesx   s   rB   c                 C   s@   |j d \}}}d|| j|jd|j|jrdd S dd S )Nr   a>  
.. deprecated:: %(since)s
    The :class:`.%(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   r   r   )r
   r+   r:   r<   r;   )r&   r@   r   r*   r"   r%   )parent_dispatch_clsr$   r
   r   r   r   r   r   _version_signature_changes   s   
rD   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::

_target_class_docobjz           )	getattrr7   rA   r&   rB   rD   r   inject_docstring_text__doc__)r$   rC   r   headerr>   r6   r   r   r   _augment_fn_docs   s    

rL   r0   )
rJ   r   r   r   r.   r7   rA   rB   rD   rL   r   r   r   r   <module>   s   

5%