
    [h;                       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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<   d6d!Z" G d" d#          Z# G d$ d%ee                   Z$ G d& d'e$e                   Z%d7d+Z& G d, d-ee                   Z' G d. d/e$e                   Z( G d0 d1e'e                   Z) G d2 d3ee                   Z* G d4 d5e*e                   Z+dS )8a  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)Mapping)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    d/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/event/base.py_is_event_namer&   2   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__B   sq     ( 	O 	OCS\))$cl:&>&G *]++, , , *
 !!MNNNr'   N)r*   r+   r   r,   )__name__
__module____qualname____doc__r4    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 )_DispatchCommonr9   Optional[Type[_ET]]r*   other_DispatchCommon[_ET]r   _JoinedDispatcher[_ET]c                    t                      NNotImplementedErrorr2   r=   s     r%   _joinz_DispatchCommon._joinQ       !###r'   r   r   _InstanceLevelDispatch[_ET]c                    t                      rA   rB   r2   r   s     r%   __getattr__z_DispatchCommon.__getattr__T   rF   r'   Type[_HasEventsDispatch[_ET]]c                    t                      rA   rB   r2   s    r%   _eventsz_DispatchCommon._eventsW   s    !###r'   Nr=   r>   r   r?   r   r   r   rG   r   rK   )	r5   r6   r7   	__slots____annotations__rE   rJ   propertyrN   r9   r'   r%   r;   r;   L   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]]rX   z	List[str]_event_namesr<   r*   zType[_JoinedDispatcher[_ET]]_joined_dispatch_clsrK   rN   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 r9   )r   r   ).0lsr_   s     r%   
<dictcomp>z&_Dispatch.__init__.<locals>.<dictcomp>   s7        G^B==  r'   )rW   r*   rZ   rX   KeyError_event_descriptors)r2   r]   r_   s     `r%   __init__z_Dispatch.__init__   s    
 ) 	'%%%(,(@(N%%%      $7  %(@ ) ) ) ) %'D!!!s   + ,AAr   r   r   rG   c                    	 | j         |         }t          | |j        |           |S # t          $ r t	          |          w xY wrA   )rX   setattrr   re   r1   )r2   r   rc   s      r%   rJ   z_Dispatch.__getattr__   sZ    	&t,B D"'2&&&I	  	' 	' 	' &&&	's	   ' A Iterator[_ClsLevelDispatch[_ET]]c              #  B   K   | j         D ]}t          | |          V  d S rA   )r[   getattr)r2   ks     r%   rf   z_Dispatch._event_descriptors   s=      " 	# 	#A $""""""	# 	#r'   	event_key_EventKey[_ET]kwr   Nonec                (     | j         j        |fi |S rA   )rN   _listenr2   rn   rp   s      r%   rs   z_Dispatch._listen   s    #t|#I44444r'   r+   r,   c                .    |                      | |          S rA   )	__class__)r2   r_   s     r%   r0   z_Dispatch._for_class   s    ~~dL111r'   instancer   c                :    |j         }|                     |          S rA   )rv   r0   )r2   rw   r_   s      r%   _for_instancez_Dispatch._for_instance   s    )|,,,r'   r=   r>   r?   c                N    d| j         j        v sJ |                     | |          S )zCreate a 'join' of this :class:`._Dispatch` and another.

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

        r\   )rv   r/   r\   rD   s     r%   rE   z_Dispatch._join   s0     &)@@@@@((u555r'   Union[str, Tuple[Any, ...]]c                .    t                      | j        ffS rA   )r)   r*   rM   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)rf   
isinstancer   rl   r   
for_modify_update)r2   r=   r~   rc   s       r%   r   z_Dispatch._update   sv    
 * 	 	B"n-- D"'""--d33;;> <    	 	r'   c                h    | j         D ])}|                    |                                            *d S rA   )rf   r   clear)r2   rc   s     r%   _clearz_Dispatch._clear   s?    ) 	( 	(BMM$%%''''	( 	(r'   rA   )r]   r^   r_   r<   rP   )r   rj   rn   ro   rp   r   r   rq   )r_   r+   r   r,   )rw   r   r   r,   rO   )r   r{   )T)r=   r,   r~   r   r   rq   r   rq   )r5   r6   r7   r8   rR   rS   weakrefWeakKeyDictionaryrZ   rg   rJ   rT   rf   rs   r0   ry   rE   r}   r   r   r9   r'   r%   rV   rV   \   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'   rV   r3   rK   rq   c                    | j         j        D ]7}t          |                             |            t          |         st          |= 8d S rA   )r"   r[   r   remove)r3   rm   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   rG   c                    d S rA   r9   rI   s     r%   rJ   z_HasEventsDispatch.__getattr__   s      r'   rq   c                R    |                      | j        | j        | j                   dS )zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)_create_dispatcher_classr5   	__bases__r/   r3   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                      rA   rB   )r3   r   r   s      r%   _accept_withz_HasEventsDispatch._accept_with   s     "###r'   F	propagateinsertnamedasynciorn   ro   r   r   r   r   r   c                   t                      rA   rB   r3   rn   r   r   r   r   s         r%   rs   z_HasEventsDispatch._listen   s     "###r'   klassrK   dispatch_clsType[_Dispatch[_ET]]c                >     |d           | _         | |_        | j         S rA   )r"   rN   )r   r   s     r%   _set_dispatchz _HasEventsDispatch._set_dispatch  s%     &d++$~r'   	classnamebasesTuple[type, ...]dict_Mapping[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          rM| j        }|J t          |d          rd|j        v rt)          |           |_        nt+          |           |_        t          d	|j        z  t.          fd|i          }||_        |t3                      |j        <   dS )
zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r"   c                0    g | ]}t          |          |S r9   )r&   )rb   rm   s     r%   
<listcomp>z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>%  s%    ===Q>!+<+<=q===r'   r   z
%sDispatchrR   r   N_slots_dispatchzJoined%s)hasattrr"   rv   rV   r   typer[   r   ri   r   r   appendr   
issubclassrN   rf   r   rl   r   rR   slots_dispatcher
dispatcherr5   _JoinedDispatcherr\   globals)r3   r   r   r   dispatch_baseevent_namesr   dispatch_instrm   super_rc   dispatch_target_clsr   s                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##,.. +&
 

 -2) %*		%.!!!r'   NrP   r   r   r   r   r   r   r   rn   ro   r   r   r   r   r   r   r   r   r   rq   )r   rK   r   r   r   r,   )r   r   r   r   r   r   r   rq   )r5   r6   r7   rS   typingTYPE_CHECKINGrJ   r   classmethodr   rs   staticmethodr   r   r9   r'   r%   r   r      s         ))));  MLLLLP P P P $ $ $ [$
 
  	$ 	$ 	$ 	$ 	$ [	$    \ 7* 7* 7* [7* 7* 7*r'   r   c                  n    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ddZ	e
dd            ZdS )r   z5Represent a connection between two _Dispatch objects.localr]   r*   r>   r   r]   r<   r*   c                D    || _         || _        | j         j        | _        d S rA   r   )r2   r   r]   s      r%   rg   z_JoinedDispatcher.__init__Z  s%     
!Z5r'   r   r   c                ,    | j         | j        | j        ffS rA   )rv   r   r]   rM   s    r%   r}   z_JoinedDispatcher.__reduce__a  s    T[ 9::r'   r   r   _JoinedListener[_ET]c                    t          | j        |          }t          | j        |j        |          }t          | |j        |           |S rA   )rl   r   r   r]   r   ri   )r2   r   rc   jls       r%   rJ   z_JoinedDispatcher.__getattr__d  sC     TZ&&T["'266bgr"""	r'   rn   ro   rp   rq   c                (     | j         j        |fi |S rA   )r]   rs   rt   s      r%   rs   z_JoinedDispatcher._listenl  s    "t{"933333r'   rK   c                    | j         j        S rA   )r]   rN   rM   s    r%   rN   z_JoinedDispatcher._eventso  s    {""r'   N)r   r>   r]   r>   )r   r   )r   r   r   r   r   rQ   )r5   r6   r7   r8   rR   rS   rg   r}   rJ   rs   rT   rN   r9   r'   r%   r   r   Q  s         ??2I    &&&&6 6 6 6; ; ; ;   4 4 4 4 # # # X# # #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 rA   )r   r"   )rb   tr   s     r%   	<genexpr>z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>|  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_is{  s&    EEEEuEEEEEEr'   r   c                    t          dj                  j        }t          |t                    r*t          d|          j        }t          |t                    *t          ||           S )Nr?   )r   r"   r]   r   r   )r   r]   r   s     r%   dispatch_parent_isz/Events._accept_with.<locals>.dispatch_parent_is~  sg    2FODDKFV%677 G6??F V%677 G fa(((r'   r"   )r   r   r   r   )r   r   r   r   )r   r"   rv   r   r   )r3   r   r   r   r   s    `   r%   r   zEvents._accept_withw  s    	F 	F 	F 	F 	F 	F	) 	) 	) 	) 	) 	) 6:&& 		CL233;tS\%;<<  K 122	
 +*3<+ABB tr'   Fr   rn   ro   r   r   r   r   r   rq   c               8    |                     ||||           d S )Nr   )base_listenr   s         r%   rs   zEvents._listen  s4     	eW 	 	
 	
 	
 	
 	
r'   c                .    |                                  d S rA   )r   )r3   rn   s     r%   _removezEvents._remove  s    r'   c                8    | j                                          d S rA   )r"   r   r   s    r%   r   zEvents._clear  s    r'   Nr   r   )rn   ro   r   rq   r   )	r5   r6   r7   r8   r   r   rs   r   r   r9   r'   r%   r   r   t  s        HH   [8 
  
 
 
 
 
 [
    [    [  r'   r   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.

    eventsrK   c                ,    |j         | _         || _        d S rA   )r"   r   )r2   r   s     r%   rg   zdispatcher.__init__  s    r'   objLiteral[None]r3   r   r   r   c                    d S rA   r9   r2   r   r3   s      r%   __get__zdispatcher.__get__  s	      #sr'   r   r>   c                    d S rA   r9   r   s      r%   r   zdispatcher.__get__  s    IL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"   ry   r/   r1   	TypeError)r2   r   r3   dispaes        r%   r   zdispatcher.__get__  s    ;= }**3//	'+CL$$ 	 	 	)/2ss5  	
 s   
0 
AAAN)r   rK   )r   r   r3   r   r   r   )r   r   r3   r   r   r>   r   r   r3   r   r   r   )r5   r6   r7   r8   rg   r   r   r9   r'   r%   r   r     s~             # # # X# LLL XL     r'   r   c                      e Zd ZddZdS )	r   r   r   r3   r   r   c                    || j         S t          |d          r|j        S | j                             |          }||_        |S )Nr   )r"   r   r   ry   )r2   r   r3   r   s       r%   r   zslots_dispatcher.__get__  sM    ;= 3)** 	'&&}**3//"r'   Nr   )r5   r6   r7   r   r9   r'   r%   r   r     s(        	 	 	 	 	 	r'   r   )r   r   r   r   )r3   rK   r   rq   ),r8   
__future__r   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   rS   r&   r)   r;   rV   r   r   r   r   r   r   r9   r'   r%   <module>r      s  	 	 	 # " " " " "                                            ! ! ! ! ! !                                # # # # # #             ( ( ( ( ( ( ! ! ! ! ! !                   ! ! ! ! ! ! DT     
& & & &O O O O O O O O $ $ $ $ $gcl $ $ $ {( {( {( {( {($ {( {( {(|   m* m* m* m* m* m* m* m*` #  #  #  #  #,  #  #  #F4 4 4 4 4$ 4 4 4n               F
 
 
 
 
z# 
 
 
 
 
r'   