
    g;                    8   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<   d/dZ" G d d      Z# G d  d!ee         Z$ G d" d#e$e         Z%d0d$Z& G d% d&ee         Z' G d' d(e$e         Z( G d) d*e'e         Z) G d+ d,ee         Z* G d- d.e*e         Z+y)1a  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]]]]_registrarsc                Z    | j                  d       xr | dk7  xs | j                  d      S )N_dispatch	_sa_event)
startswith)names    T/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/event/base.py_is_event_namer#   2   s3     OOC  7TZ%7&		%&    c                      e Zd ZdZddZy)_UnpickleDispatchzSerializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    c                    |j                   D ]D  }d|j                  v st        d|j                  d   j                        j	                  |      c S  t        d      )Nr   _Dispatch[_ET]z*No class with a 'dispatch' member present.)__mro____dict__r   r   
_for_classAttributeError)self_instance_clsclss      r"   __call__z_UnpickleDispatch.__call__B   s^     (( 	OCS\\)$cll:&>&G&G*]+,	O !!MNNr$   N)r.   	Type[_ET]returnr(   )__name__
__module____qualname____doc__r0    r$   r"   r&   r&   <   s    
Or$   r&   c                  >    e Zd ZU dZded<   ddZd	dZed
d       Zy)_DispatchCommonr7   Optional[Type[_ET]]r.   c                    t               NNotImplementedErrorr-   others     r"   _joinz_DispatchCommon._joinQ       !##r$   c                    t               r<   r=   r-   r!   s     r"   __getattr__z_DispatchCommon.__getattr__T   rB   r$   c                    t               r<   r=   r-   s    r"   _eventsz_DispatchCommon._eventsW   s    !##r$   Nr@   _DispatchCommon[_ET]r2   _JoinedDispatcher[_ET]r!   strr2   z_InstanceLevelDispatch[_ET]r2   Type[_HasEventsDispatch[_ET]])	r3   r4   r5   	__slots____annotations__rA   rE   propertyrH   r7   r$   r"   r9   r9   L   s+    I&&$$ $ $r$   r9   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<   	 	 d	 	 	 ddZ	ddZ
edd       Zd dZd!dZd"dZd#dZd$dZ	 d%	 	 	 	 	 d&dZd'dZy)(	_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_listenersbool_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_clsrO   rH   Nc           	        || _         || _        |r|J 	 | j                  |   | _        y i | _        y # t        $ rL |j
                  D ci c]  }|j                  t        ||       nc c}w c}x| _        | j                  |<   Y y w xY wr<   )rU   r.   rY   rV   KeyError_event_descriptorsr!   r   )r-   parentinstance_clslss       r"   __init__z_Dispatch.__init__   s    
 )%%%(,(@(@(N% %'D!  
 %77 GG^B== %(@(@ )s   3 B
A)(BBc                    	 | j                   |   }t        | |j                  |       |S # t        $ r t	        |      w xY wr<   )rV   setattrr!   r]   r,   )r-   r!   ra   s      r"   rE   z_Dispatch.__getattr__   sJ    	&&t,B D"''2&I	  	' &&	's   * ?c              #  J   K   | j                   D ]  }t        | |        y wr<   )rZ   getattr)r-   ks     r"   r^   z_Dispatch._event_descriptors   s*     "" 	#A $""	#s   !#c                <     | j                   j                  |fi |S r<   )rH   _listenr-   	event_keykws      r"   ri   z_Dispatch._listen   s    #t||##I444r$   c                &    | j                  | |      S r<   )	__class__)r-   r`   s     r"   r+   z_Dispatch._for_class   s    ~~dL11r$   c                <    |j                   }| j                  |      S r<   )rn   r+   )r-   instancer`   s      r"   _for_instancez_Dispatch._for_instance   s    ))|,,r$   c                Z    d| j                   j                  v sJ | j                  | |      S )zCreate a 'join' of this :class:`._Dispatch` and another.

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

        r[   )rn   r*   r[   r?   s     r"   rA   z_Dispatch._join   s/     &)@)@@@@((u55r$   c                0    t               | j                  ffS r<   )r&   r.   rG   s    r"   
__reduce__z_Dispatch.__reduce__   s     "T%7%7$999r$   c                    |j                   D ]I  }t        |t              rt        | |j                        j                  |       j                  ||       K y)zIPopulate from the listeners in another :class:`_Dispatch`
        object.)only_propagateN)r^   
isinstancer   rf   r!   
for_modify_update)r-   r@   rv   ra   s       r"   ry   z_Dispatch._update   sT    
 ** 	B"n-D"''"--d3;;> < 	r$   c                d    | j                   D ]!  }|j                  |       j                          # y r<   )r^   rx   clear)r-   ra   s     r"   _clearz_Dispatch._clear   s,    )) 	(BMM$%%'	(r$   r<   )r_   zOptional[_Dispatch[_ET]]r`   r:   rL   )r2   z Iterator[_ClsLevelDispatch[_ET]]rk   _EventKey[_ET]rl   r   r2   None)r`   r1   r2   r(   )rp   r   r2   r(   rI   )r2   zUnion[str, Tuple[Any, ...]])T)r@   r(   rv   rW   r2   r   r2   r   )r3   r4   r5   r6   rP   rQ   weakrefWeakKeyDictionaryrY   rb   rE   rR   r^   ri   r+   rq   rA   rt   ry   r|   r7   r$   r"   rT   rT   \   s    * KI 	"!!#   $ 54&&66** -1'(' *',	 # #52-	6: =A
#
59
	
(r$   rT   c                    | j                   j                  D ]+  }t        |   j                  |        t        |   r%t        |= - y r<   )r   rZ   r   remove)r/   rg   s     r"   _remove_dispatcherr      s;    \\&& 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y)_HasEventsDispatchr:   _dispatch_targetr(   r   c                     y r<   r7   rD   s     r"   rE   z_HasEventsDispatch.__getattr__   s    r$   c                f    | j                  | j                  | j                  | j                         y)zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)_create_dispatcher_classr3   	__bases__r*   r/   s    r"   __init_subclass__z$_HasEventsDispatch.__init_subclass__   s"     	$$S\\3==#,,Or$   c                    t               r<   r=   )r/   target
identifiers      r"   _accept_withz_HasEventsDispatch._accept_with   s     "##r$   F	propagateinsertnamedasyncioc                   t               r<   r=   r/   rk   r   r   r   r   s         r"   ri   z_HasEventsDispatch._listen   s     "##r$   c                B     |d       | _         | |_        | j                   S r<   )r   rH   )klassdispatch_clss     r"   _set_dispatchz _HasEventsDispatch._set_dispatch  s"     &d+$~~r$   c           
        t        | d      r| j                  j                  }nt        }|D cg c]  }t	        |      s| }}t        dt        d|z  |fd|i            }||_        | j                  | |      }|j                  D ]4  }t        ||t        | ||                t        |   j                  |        6 |j                  D ]}  }	t        |	t              s|	t        us|	j                  j                  j                   D ]>  }
t        ||
j"                  |
       |j                  j                  |
j"                         @  t%        | dd      rK| j&                  }|J t        |d      rd|j(                  v rt+        |       |_        nt-        |       |_        t        d|j.                  z  t0        fd|i      }||_        |t5               |j.                  <   yc c}w )	zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r   Type[_Dispatch[_ET]]z
%sDispatchrP   r   N_slots_dispatchzJoined%s)hasattrr   rn   rT   r#   r   typerZ   r   rd   r   r   appendr   
issubclassrH   r^   r!   rf   r   rP   slots_dispatcher
dispatcherr3   _JoinedDispatcherr[   globals)r/   	classnamebasesdict_dispatch_baserg   event_namesr   dispatch_instsuper_ra   dispatch_target_clsr   s                r"   r   z+_HasEventsDispatch._create_dispatcher_class  s    3
#LL22M%M"'=Q>!+<q=="y( k*
 %0!))#|<** 	'AM1&7U1X&FGN!!#&	' #,, 	>F&),y1H ..11DD >BM277B7 --44RWW=>	> 3*D1"%"6"6&222+[9%)<)F)FF/?/D#,/9##,... +&

 -2) %*	%..!S >s
   G"G"NrL   r   r   zUnion[_ET, Type[_ET]]r   rM   r2   zOptional[Union[_ET, Type[_ET]]]rk   r~   r   rW   r   rW   r   rW   r   rW   r2   r   )r   rO   r   r   r2   r(   )r   rM   r   zTuple[type, ...]r   zMapping[str, Any]r2   r   )r3   r4   r5   rQ   typingTYPE_CHECKINGrE   r   classmethodr   ri   staticmethodr   r   r7   r$   r"   r   r      s   )); LP $*$8;$	($ $
 
  	$!	$ 		$
 	$ 	$ 	$ 
	$ 	$ ,* 
  7*7*$47*=N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y)r   z5Represent a connection between two _Dispatch objects.localr_   r.   rJ   r   r_   r:   r.   c                V    || _         || _        | j                   j                  | _        y r<   r   )r-   r   r_   s      r"   rb   z_JoinedDispatcher.__init__Z  s$     
!ZZ55r$   c                J    | j                   | j                  | j                  ffS r<   )rn   r   r_   rG   s    r"   rt   z_JoinedDispatcher.__reduce__a  s    T[[ 9::r$   c                    t        | j                  |      }t        | j                  |j                  |      }t        | |j                  |       |S r<   )rf   r   r   r_   r!   rd   )r-   r!   ra   jls       r"   rE   z_JoinedDispatcher.__getattr__d  s?     TZZ&T[["''26bggr"	r$   c                <     | j                   j                  |fi |S r<   )r_   ri   rj   s      r"   ri   z_JoinedDispatcher._listenl  s    "t{{""9333r$   c                .    | j                   j                  S r<   )r_   rH   rG   s    r"   rH   z_JoinedDispatcher._eventso  s    {{"""r$   N)r   rJ   r_   rJ   )r2   r   )r!   rM   r2   z_JoinedListener[_ET]r}   rN   )r3   r4   r5   r6   rP   rQ   rb   rt   rE   ri   rR   rH   r7   r$   r"   r   r   Q  sT    ?2I  &&6)63G6;4 # #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y)Eventsz>Define event listening functions for a particular target type.c                   dfd}dfd}t        d      rg || j                  j                        sI |t        | j                  j                        s( |t              r || j                  j                        rS y )Nc                 ,    t        fd| D              S )Nc              3  J   K   | ]  }t        j                  |        y wr<   )rw   r   ).0tr   s     r"   	<genexpr>z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>|  s     E!z&//15Es    #)all)typesr   s    r"   dispatch_isz(Events._accept_with.<locals>.dispatch_is{  s    EuEEEr$   c                X    t        t        dj                        j                  |       S )NrK   )rw   r   r   r_   )r   r   s    r"   dispatch_parent_isz/Events._accept_with.<locals>.dispatch_parent_is~  s'    -v?FF r$   r   )r   	Type[Any]r2   rW   )r   r   r2   rW   )r   r   rn   r   r   )r/   r   r   r   r   s    `   r"   r   zEvents._accept_withw  se    	F	 6:&CLL223tS\\%;%;< 12*3<<+A+AB r$   Fr   c               .    |j                  ||||       y )Nr   )base_listenr   s         r"   ri   zEvents._listen  s      	eW 	 	
r$   c                $    |j                          y r<   )r   )r/   rk   s     r"   _removezEvents._remove  s    r$   c                8    | j                   j                          y r<   )r   r|   r   s    r"   r|   zEvents._clear  s    r$   Nr   r   )rk   r~   r2   r   r   )	r3   r4   r5   r6   r   r   ri   r   r|   r7   r$   r"   r   r   t  s    H*8;	( 4 
  
!
 	

 
 
 
 

 
    r$   r   c                  P    e Zd ZdZddZe	 	 	 	 	 	 dd       Zed	d       Zd
dZy)r   zDescriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    c                4    |j                   | _         || _        y r<   )r   events)r-   r   s     r"   rb   zdispatcher.__init__  s    r$   c                     y r<   r7   r-   objr/   s      r"   __get__zdispatcher.__get__  s      #r$   c                     y r<   r7   r   s      r"   r   zdispatcher.__get__  s    ILr$   c                    || j                   S | j                   j                  |      }	 ||j                  d<   |S # t        $ r}t	        d|d      |d }~ww xY w)Nr   ztarget z> doesn't have __dict__, should it be defining _slots_dispatch?)r   rq   r*   r,   	TypeError)r-   r   r/   dispaes        r"   r   zdispatcher.__get__  sk    ;== }}**3/	'+CLL$   	/25 	s   < 	AAAN)r   rO   )r   zLiteral[None]r/   r   r2   r   )r   r   r/   r   r2   rJ   r   r   r/   r   r2   r   )r3   r4   r5   r6   rb   r   r   r7   r$   r"   r   r     sM     # #'0#	# # L Lr$   r   c                      e Zd ZddZy)r   c                    || j                   S t        |d      r|j                  S | j                   j                  |      }||_        |S )Nr   )r   r   r   rq   )r-   r   r/   r   s       r"   r   zslots_dispatcher.__get__  sI    ;== 3)*&&&}}**3/"r$   Nr   )r3   r4   r5   r   r7   r$   r"   r   r     s    	r$   r   )r!   rM   r2   rW   )r/   rO   r2   r   ),r6   
__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   rQ   r#   r&   r9   rT   r   r   r   r   r   r   r7   r$   r"   <module>r      s  	 #         !       #   ( !    ! DT E 
&O O $gcl $ {($ {(|m* m*` #,  #F2$ 2j   F
z# 
r$   