
    Wd:                       U 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 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  ej        e          Zde d<   d5d Z! G d! d"          Z" G d# d$ee                   Z# G d% d&e#e                   Z$d6d*Z% G d+ d,ee                   Z& G d- d.e&e                   Z' G d/ d0e#e                   Z( G d1 d2ee                   Z) G d3 d4e)e                   Z*dS )7a  Base implementation classes.

The public-facing ``Events`` serves as the base class for an event interface;
its public attributes represent different kinds of events.   These attributes
are mirrored onto a ``_Dispatch`` class, which serves as a container for
collections of listener functions.   These collections are represented both
at the class level of a particular ``_Dispatch`` class as well as within
instances of ``_Dispatch``.

    )annotationsN)Any)cast)Dict)Generic)Iterator)List)MutableMapping)Optional)overload)Tuple)Type)Union   )_ClsLevelDispatch)_EmptyListener)_InstanceLevelDispatch)_JoinedListener)_ET)	_EventKey   )util)Literalz8MutableMapping[str, List[Type[_HasEventsDispatch[Any]]]]_registrarsnamestrreturnboolc                d    |                      d           o| dk    p|                      d          S )N_dispatch	_sa_event)
startswith)r   s    Q/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/sqlalchemy/event/base.py_is_event_namer%   1   s9     OOC   7TZ%7&		%	%&    c                      e Zd ZdZddZdS )	_UnpickleDispatchzSerializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    _instance_cls	Type[_ET]r   _Dispatch[_ET]c                    |j         D ]@}d|j        v r5t          d|j        d         j                                      |          c S At          d          )Nr!   r+   z*No class with a 'dispatch' member present.)__mro____dict__r   r!   
_for_classAttributeError)selfr)   clss      r$   __call__z_UnpickleDispatch.__call__A   sq     ( 	O 	OCS\))$cl:&>&G *]++, , , *
 !!MNNNr&   N)r)   r*   r   r+   )__name__
__module____qualname____doc__r3    r&   r$   r(   r(   ;   s8         
O O O O O Or&   r(   c                  F    e Zd ZU dZded<   ddZddZedd            ZdS )_DispatchCommonr8   Optional[Type[_ET]]r)   other_DispatchCommon[_ET]r   _JoinedDispatcher[_ET]c                    t                      NNotImplementedError)r1   r<   s     r$   _joinz_DispatchCommon._joinP       !###r&   r   r   _InstanceLevelDispatch[_ET]c                    t                      r@   rA   r1   r   s     r$   __getattr__z_DispatchCommon.__getattr__S   rD   r&   Type[_HasEventsDispatch[_ET]]c                    t                      r@   rA   r1   s    r$   _eventsz_DispatchCommon._eventsV   s    !###r&   Nr<   r=   r   r>   r   r   r   rE   r   rI   )	r4   r5   r6   	__slots____annotations__rC   rH   propertyrL   r8   r&   r$   r:   r:   K   so         I&&&&$ $ $ $$ $ $ $ $ $ $ X$ $ $r&   r:   c                      e Zd ZU dZdZded<    ej                    Zded<   ded<   d	ed
<   ded<   ded<   ded<   	 	 d3d4dZ	d5dZ
ed6d            Zd7d"Zd8d%Zd9d(Zd:d,Zd;d.Z	 d<d=d1Zd>d2ZdS )?	_DispatchaM  Mirror the event listening definitions of an Events class with
    listener collections.

    Classes which define a "dispatch" member will return a
    non-instantiated :class:`._Dispatch` subclass when the member
    is accessed at the class level.  When the "dispatch" member is
    accessed at the instance level of its owner, an instance
    of the :class:`._Dispatch` class is returned.

    A :class:`._Dispatch` class is generated for each :class:`.Events`
    class defined, by the :meth:`._HasEventsDispatch._create_dispatcher_class`
    method.  The original :class:`.Events` classes remain untouched.
    This decouples the construction of :class:`.Events` subclasses from
    the implementation used by the event internals, and allows
    inspecting tools like Sphinx to work in an unsurprising
    way against the public API.

    )_parentr)   r.   _empty_listenersr   _active_historyz9MutableMapping[Type[_ET], Dict[str, _EmptyListener[_ET]]]_empty_listener_regzDict[str, _EmptyListener[_ET]]rV   z	List[str]_event_namesr;   r)   zType[_JoinedDispatcher[_ET]]_joined_dispatch_clsrI   rL   NparentOptional[_Dispatch[_ET]]instance_clsc                    || _         | _        rL|J 	 | j                 | _        d S # t          $ r& fd|j        D             x| _        | j        <   Y d S w xY wi | _        d S )Nc                <    i | ]}|j         t          |          S r8   )r   r   ).0lsr]   s     r$   
<dictcomp>z&_Dispatch.__init__.<locals>.<dictcomp>   s7        G^B==  r&   )rU   r)   rX   rV   KeyError_event_descriptors)r1   r[   r]   s     `r$   __init__z_Dispatch.__init__   s    
 ) 	'%%%(,(@(N%%%      $7  %(@ ) ) ) ) %'D!!!s   + ,AAr   r   r   rE   c                    	 | j         |         }t          | |j        |           |S # t          $ r t	          |          w xY wr@   )rV   setattrr   rc   r0   )r1   r   ra   s      r$   rH   z_Dispatch.__getattr__   sZ    	&t,B D"'2&&&I	  	' 	' 	' &&&	's	   ' A Iterator[_ClsLevelDispatch[_ET]]c              #  B   K   | j         D ]}t          | |          V  d S r@   )rY   getattr)r1   ks     r$   rd   z_Dispatch._event_descriptors   s=      " 	# 	#A $""""""	# 	#r&   	event_key_EventKey[_ET]kwr   Nonec                (     | j         j        |fi |S r@   )rL   _listenr1   rl   rn   s      r$   rq   z_Dispatch._listen   s    #t|#I44444r&   r*   r+   c                .    |                      | |          S r@   )	__class__)r1   r]   s     r$   r/   z_Dispatch._for_class   s    ~~dL111r&   instancer   c                :    |j         }|                     |          S r@   )rt   r/   )r1   ru   r]   s      r$   _for_instancez_Dispatch._for_instance   s    )|,,,r&   r<   r=   r>   c                    d| j         j        vr7t          d| j         j        z  t          fd| j        i          }|| j         _        |                     | |          S )zCreate a 'join' of this :class:`._Dispatch` and another.

        This new dispatcher will dispatch events to both
        :class:`._Dispatch` objects.

        rZ   zJoined%srP   )rt   r.   typer4   _JoinedDispatcherrY   rZ   )r1   r<   r2   s      r$   rC   z_Dispatch._join   sc     ")@@@T^44"$d/0 C
 36DN/((u555r&   Union[str, Tuple[Any, ...]]c                .    t                      | j        ffS r@   )r(   r)   rK   s    r$   
__reduce__z_Dispatch.__reduce__   s     ""T%7$999r&   Tonly_propagatec                    |j         D ]U}t          |t                    rt          | |j                                      |                               ||           VdS )zIPopulate from the listeners in another :class:`_Dispatch`
        object.)r~   N)rd   
isinstancer   rj   r   
for_modify_update)r1   r<   r~   ra   s       r$   r   z_Dispatch._update   sv    
 * 	 	B"n-- D"'""--d33;;> <    	 	r&   c                h    | j         D ])}|                    |                                            *d S r@   )rd   r   clear)r1   ra   s     r$   _clearz_Dispatch._clear   s?    ) 	( 	(BMM$%%''''	( 	(r&   r@   )r[   r\   r]   r;   rN   )r   rh   rl   rm   rn   r   r   ro   )r]   r*   r   r+   )ru   r   r   r+   rM   )r   r{   )T)r<   r+   r~   r   r   ro   r   ro   )r4   r5   r6   r7   rP   rQ   weakrefWeakKeyDictionaryrX   re   rH   rR   rd   rq   r/   rw   rC   r}   r   r   r8   r&   r$   rT   rT   [   s         * KI 	"!##  $ $ $ $ 5444&&&&6666**** -1' ' ' ' ',	 	 	 	 # # # X#5 5 5 52 2 2 2- - - -6 6 6 6 : : : : =A
 
 
 
 
( ( ( ( ( (r&   rT   r2   rI   ro   c                    | j         j        D ]7}t          |                             |            t          |         st          |= 8d S r@   )r!   rY   r   remove)r2   rk   s     r$   _remove_dispatcherr      sL    \&  Ac"""1~ 	A r&   c                      e Zd ZU ded<   	 ded<   	 ej        rd'd	Zd(dZed)d            Z	edddddd*d            Z
ed+d            Zed,d%            Zd&S )-_HasEventsDispatchr;   _dispatch_targetr+   r!   r   r   r   rE   c                    d S r@   r8   rG   s     r$   rH   z_HasEventsDispatch.__getattr__   s    Cr&   ro   c                R    |                      | j        | j        | j                   dS )zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)_create_dispatcher_classr4   	__bases__r.   r2   s    r$   __init_subclass__z$_HasEventsDispatch.__init_subclass__   s(     	$$S\3=#,OOOOOr&   targetUnion[_ET, Type[_ET]]
identifierOptional[Union[_ET, Type[_ET]]]c                    t                      r@   rA   )r2   r   r   s      r$   _accept_withz_HasEventsDispatch._accept_with   s     "###r&   F	propagateinsertnamedasynciorl   rm   r   r   r   r   r   c                   t                      r@   rA   r2   rl   r   r   r   r   s         r$   rq   z_HasEventsDispatch._listen  s     "###r&   klassrI   dispatch_clsType[_Dispatch[_ET]]c                >     |d           | _         | |_        | j         S r@   )r!   rL   )r   r   s     r$   _set_dispatchz _HasEventsDispatch._set_dispatch  s%     &d++$~r&   	classnamebasesTuple[type, ...]dict_Dict[str, Any]c           
     ,   t          | d          r| j        j        }nt          }d |D             }t	          dt          d|z  |fd|i                    }||_        |                     | |          }|j        D ]G}t          ||t          | ||                              t          |                             |            H|j        D ]i}	t          |	t                    rR|	t          urI|	j        j        j        D ]7}
t          ||
j        |
           |j                            |
j                   8jt#          | dd          rP| j        }|J t          |d          rd|j        v rt)          |           |_        dS t+          |           |_        dS dS )	zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r!   c                0    g | ]}t          |          |S r8   )r%   )r`   rk   s     r$   
<listcomp>z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>*  s%    ===Q>!+<+<=q===r&   r   z
%sDispatchrP   r   N_slots_dispatch)hasattrr!   rt   rT   r   ry   rY   r   rg   r   r   appendr   
issubclassrL   rd   r   rj   r   rP   slots_dispatcher
dispatcher)r2   r   r   r   dispatch_baseevent_namesr   dispatch_instrk   super_ra   dispatch_target_clss               r$   r   z+_HasEventsDispatch._create_dispatcher_class  s    3
## 	&L2MM%M==%==="y( k* 
 
 %0!))#|<<* 	' 	'AM1&7U1X&F&FGGGN!!#&&&&", 	> 	>F&),, >y1H1H .1D > >BM27B777 -44RW====3*D11 		?"%"6&222+[99?%)<)FFF/?/D/D#,,,/9##,,,		? 		?r&   NrN   r   r   r   r   r   r   r   rl   rm   r   r   r   r   r   r   r   r   r   ro   )r   rI   r   r   r   r+   )r   r   r   r   r   r   r   ro   )r4   r5   r6   rQ   typingTYPE_CHECKINGrH   r   classmethodr   rq   staticmethodr   r   r8   r&   r$   r   r      s        ))));  	 	 	 	P P P P $ $ $ [$
 
  	$ 	$ 	$ 	$ 	$ [	$    \ -? -? -? [-? -? -?r&   r   c                  ~    e Zd ZdZedd            Zed	d	d	d	d
dd            Zedd            Zedd            ZdS )Eventsz>Define event listening functions for a particular target type.r   r   r   r   r   r   c                    d	fd}d
fd}t          d          rW || j        j                  s@ |t          | j        j                  s% |t                    r || j        j                  rS d S )Ntypes	Type[Any]r   r   c                 :    t          fd| D                       S )Nc              3  B   K   | ]}t          j        |          V  d S r@   )r   r!   )r`   tr   s     r$   	<genexpr>z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>T  s/      EE!z&/155EEEEEEr&   )all)r   r   s    r$   dispatch_isz(Events._accept_with.<locals>.dispatch_isS  s&    EEEEuEEEEEEr&   r   c                T    t          t          dj                  j        |           S )Nr>   )r   r   r!   r[   )r   r   s    r$   dispatch_parent_isz/Events._accept_with.<locals>.dispatch_parent_isV  s*    -v??F  r&   r!   )r   r   r   r   )r   r   r   r   )r   r!   rt   ry   rz   )r2   r   r   r   r   s    `   r$   r   zEvents._accept_withO  s    	F 	F 	F 	F 	F 	F	 	 	 	 	 	 6:&& 		CL233;tS\%;<<  K 122	
 +*3<+ABB tr&   Fr   rl   rm   r   r   r   r   r   ro   c               8    |                     ||||           d S )Nr   )base_listenr   s         r$   rq   zEvents._listenj  s4     	eW 	 	
 	
 	
 	
 	
r&   c                .    |                                  d S r@   )r   )r2   rl   s     r$   _removezEvents._removex  s    r&   c                8    | j                                          d S r@   )r!   r   r   s    r$   r   zEvents._clear|  s    r&   Nr   r   )rl   rm   r   ro   r   )	r4   r5   r6   r7   r   r   rq   r   r   r8   r&   r$   r   r   L  s        HH   [4 
  
 
 
 
 
 [
    [    [  r&   r   c                  f    e Zd ZU dZdZded<   ded<   ded<   ddZddZddZe	dd            Z
dS )rz   z5Represent a connection between two _Dispatch objects.localr[   r)   r=   r   r[   r;   r)   c                D    || _         || _        | j         j        | _        d S r@   r   )r1   r   r[   s      r$   re   z_JoinedDispatcher.__init__  s%     
!Z5r&   r   r   r   _JoinedListener[_ET]c                    t          | j        |          }t          | j        |j        |          }t          | |j        |           |S r@   )rj   r   r   r[   r   rg   )r1   r   ra   jls       r$   rH   z_JoinedDispatcher.__getattr__  sC     TZ&&T["'266bgr"""	r&   rl   rm   rn   r   ro   c                (     | j         j        |fi |S r@   )r[   rq   rr   s      r$   rq   z_JoinedDispatcher._listen  s    "t{"933333r&   rI   c                    | j         j        S r@   )r[   rL   rK   s    r$   rL   z_JoinedDispatcher._events  s    {""r&   N)r   r=   r[   r=   )r   r   r   r   r   rO   )r4   r5   r6   r7   rP   rQ   re   rH   rq   rR   rL   r8   r&   r$   rz   rz     s         ??2I    &&&&6 6 6 6   4 4 4 4 # # # X# # #r&   rz   c                  R    e Zd ZdZddZedd            Zedd            ZddZdS )r   zDescriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    eventsrI   c                ,    |j         | _         || _        d S r@   )r!   r   )r1   r   s     r$   re   zdispatcher.__init__  s    r&   objLiteral[None]r2   r   r   r   c                    d S r@   r8   r1   r   r2   s      r$   __get__zdispatcher.__get__  s	     	r&   r   r=   c                    d S r@   r8   r   s      r$   r   zdispatcher.__get__  s    r&   c                    || j         S | j                             |          }	 ||j        d<   n&# t          $ r}t	          d|d          |d }~ww xY w|S )Nr!   ztarget z> doesn't have __dict__, should it be defining _slots_dispatch?)r!   rw   r.   r0   	TypeError)r1   r   r2   dispaes        r$   r   zdispatcher.__get__  s    ;= }**3//	'+CL$$ 	 	 	)/2ss5  	
 s   
0 
AAAN)r   rI   )r   r   r2   r   r   r   )r   r   r2   r   r   r=   r   r   r2   r   r   r   )r4   r5   r6   r7   re   r   r   r8   r&   r$   r   r     s                X
    X     r&   r   c                      e Zd ZddZdS )	r   r   r   r2   r   r   c                    || j         S t          |d          r|j        S | j                             |          }||_        |S )Nr   )r!   r   r   rw   )r1   r   r2   r   s       r$   r   zslots_dispatcher.__get__  sM    ;= 3)** 	'&&}**3//"r&   Nr   )r4   r5   r6   r   r8   r&   r$   r   r     s(        	 	 	 	 	 	r&   r   )r   r   r   r   )r2   rI   r   ro   )+r7   
__future__r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   attrr   r   r   r   registryr   r    r   util.typingr   defaultdictlistr   rQ   r%   r(   r:   rT   r   r   r   rz   r   r   r8   r&   r$   <module>r      s  	 	 	 # " " " " "                                      ! ! ! ! ! !                                # # # # # #             ( ( ( ( ( ( ! ! ! ! ! !                   ! ! ! ! ! ! DT     
& & & &O O O O O O O O $ $ $ $ $gcl $ $ $ @( @( @( @( @($ @( @( @(F   d? d? d? d? d? d? d? d?N2 2 2 2 2$ 2 2 2j# # # # #, # # #@" " " " " " " "J
 
 
 
 
z# 
 
 
 
 
r&   