
    -h*                     >   S r SSKJr  SSKrSSKJr  SSKJr  SSKJr  SS	KJ	r	  \	R                  " \5      rS
 r " S S\5      r " S S\5      r " S S\5      rS rS r " S S\	R*                  " \\5      5      r " S S\5      r " S S\5      r " S S\5      rg)a  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``.

    )absolute_importN   )_ClsLevelDispatch)_EmptyListener)_JoinedListener   )utilc                 v    U R                  S5      (       + =(       a    U S:g  =(       d    U R                  S5      $ )N_dispatch	_sa_event)
startswith)names    jC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/event/base.py_is_event_namer      s3     OOC  7TZ%7&		%&    c                       \ rS rSrSrS rSrg)_UnpickleDispatch)   zySerializable callable that re-generates an instance of
:class:`_Dispatch` given a particular :class:`.Events` subclass.

c                     UR                    H=  nSUR                  ;   d  M  UR                  S   R                  R                  U5      s  $    [	        S5      e)Nr   z*No class with a 'dispatch' member present.)__mro____dict__r   
_for_classAttributeError)self_instance_clsclss      r   __call___UnpickleDispatch.__call__/   sQ     ((CS\\)||J/88CC!  ) !!MNNr    N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__r    r   r   r   r   )   s    
Or   r   c                       \ rS rSrSrSr\R                  " 5       rSS jr	S r
\S 5       r\S 5       rS	 rS
 rS rS rSS jrS rSrg)	_Dispatch9   a  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 :func:`._create_dispatcher_class` function.
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_listenersNc           	         Xl         X l        U(       a   U R                  U   U l        g 0 U l        g ! [         aN    UR
                   Vs0 s H  nUR                  [        X25      _M     Os  snf sn=U l        U R                  U'    g f = fN)r*   r   _empty_listener_regr+   KeyError_event_descriptorsr   r   )r   parentinstance_clslss       r   __init___Dispatch.__init__S   s    )(,(@(@(N% %'D!  
 %777 GG^B==7%(@(@ )s   2 B

 A+*B
	B
c                      U R                   U   n[        XR                  U5        U$ ! [         a    [	        U5      ef = fr-   )r+   setattrr   r/   r   )r   r   r3   s      r   __getattr___Dispatch.__getattr__d   sH    	&&t,B D''2&I	  	' &&	's   ) ?c              #   L   #    U R                    H  n[        X5      v   M     g 7fr-   )_event_namesgetattr)r   ks     r   r0   _Dispatch._event_descriptorso   s"     ""A $"" #s   "$c                 .    U R                   R                  $ r-   )_events_listenr   s    r   rA   _Dispatch._listenv   s    ||###r   c                 $    U R                  X5      $ r-   )	__class__)r   r2   s     r   r   _Dispatch._for_classz   s    ~~d11r   c                 <    UR                   nU R                  U5      $ r-   )rE   r   )r   instancer2   s      r   _for_instance_Dispatch._for_instance}   s    ))|,,r   c                     SU R                   R                  ;  aE  [        SU R                   R                  -  [        4SU R
                  05      nX R                   l        U R                  X5      $ )zCreate a 'join' of this :class:`._Dispatch` and another.

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

_joined_dispatch_clszJoined%s	__slots__)rE   r   typer!   _JoinedDispatcherr;   rL   )r   otherr   s      r   _join_Dispatch._join   sc     ")@)@@T^^444"$d//0C 36NN/((55r   c                 0    [        5       U R                  44$ r-   )r   r   rB   s    r   
__reduce___Dispatch.__reduce__   s     "T%7%7$999r   c                     UR                    HK  n[        U[        5      (       a  M  [        XR                  5      R                  U 5      R                  X2S9  MM     g)zAPopulate from the listeners in another :class:`_Dispatch`
object.)only_propagateN)r0   
isinstancer   r<   r   
for_modify_update)r   rP   rW   r3   s       r   rZ   _Dispatch._update   sN     **B"n--D''"--d3;; <  +r   c                 h    U R                    H"  nUR                  U 5      R                  5         M$     g r-   )r0   rY   clear)r   r3   s     r   _clear_Dispatch._clear   s'    ))BMM$%%' *r   )r+   r   r*   r-   )T)r!   r"   r#   r$   r%   rM   weakrefWeakKeyDictionaryr.   r4   r8   propertyr0   rA   r   rI   rQ   rT   rZ   r^   r&   r    r   r   r(   r(   9   sn    * KI!335'"	 # # $ $2-6":(r   r(   c                       \ rS rSrSrS rSrg)
_EventMeta   zGIntercept new Event subclasses and create
associated _Dispatch classes.c                 H    [        XX#5        [        R                  XX#5        g r-   )_create_dispatcher_classrN   r4   )r   	classnamebasesdict_s       r   r4   _EventMeta.__init__   s     >ce3r   r    N)r!   r"   r#   r$   r%   r4   r&   r    r   r   rd   rd      s    %4r   rd   c           
         [        U S5      (       a  U R                  R                  nO[        nU Vs/ s H  n[	        U5      (       d  M  UPM     nn[        SU-  U4SU05      nXgl        U R                  X5      nUR                   H3  n[        X[        XU   5      5        [        U   R                  U 5        M5     UR                   H  n	[        U	[        5      (       d  M  U	[        Ld  M%  U	R                  R                  R                   H>  n
[        XR                   U
5        UR                  R                  U
R                   5        M@     M     [#        U SS5      (       ac  U R$                  n[        US5      (       a+  SUR&                  ;   a  [)        U 5      U R$                  l        g[+        U 5      U R$                  l        ggs  snf )zNCreate a :class:`._Dispatch` class corresponding to an
:class:`.Events` class.r   z
%sDispatchrM   _dispatch_targetN_slots_dispatch)hasattrr   rE   r(   r   rN   r;   _set_dispatchr7   r   _registrarsappend	__bases__
issubclassr@   r0   r   r<   rm   rM   slots_dispatcher
dispatcher)r   rh   ri   rj   dispatch_baser=   event_namesdispatch_clsdispatch_instsuper_r3   the_clss               r   rg   rg      sz    sJ..!#9e~a'81eK9y ="2[+4NL !,%%c8M&&"3Cq"BCAc" ' ((fi((V9-Dnn--@@ww3))009 A ) s&--&&G[))!W%6%66,<S,AC  ),6sOC  ) .% :s   GGc                     U R                   R                   H2  n[        U   R                  U 5        [        U   (       a  M+  [        U	 M4     g r-   )r   r;   rq   remove)r   r=   s     r   _remove_dispatcherr      s8    \\&&Ac"1~~A 'r   c                   t    \ rS rSrSr\S 5       r\S 5       r\    S
S j5       r	\S 5       r
\S 5       rSrg	)Events   z>Define event listening functions for a particular target type.c                 @    U" S 5      U l         Xl        U R                   $ r-   )r   r@   )r   ry   s     r   rp   Events._set_dispatch   s      $D)"||r   c                 :  ^ U4S jnU4S jn[        TS5      (       a}  U" U R                  R                  5      (       dX  U" [        U R                  R                  5      (       d2  U" [        5      (       a$  U" U R                  R                  5      (       a  T$ g g g )Nc                  .   > [        U4S jU  5       5      $ )Nc              3   P   >#    U  H  n[        TR                  U5      v   M     g 7fr-   )rX   r   ).0ttargets     r   	<genexpr>;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>   s     Eu!z&//155us   #&)all)typesr   s    r   dispatch_is(Events._accept_with.<locals>.dispatch_is   s    EuEEEr   c                 D   > [        TR                  R                  U 5      $ r-   )rX   r   r1   )r   r   s    r   dispatch_parent_is/Events._accept_with.<locals>.dispatch_parent_is   s    foo44a88r   r   )ro   r   rE   rN   rO   )r   r   r   r   s    `  r   _accept_withEvents._accept_with   s    	F	9
 6:&&CLL2233tS\\%;%;<< 122*3<<+A+ABB  C 3 'r   c                 $    UR                  X#XES9  g )N)	propagateinsertnamedasyncio)base_listen)r   	event_keyr   r   r   r   s         r   rA   Events._listen   s     	e 	 	
r   c                 $    UR                  5         g r-   )r~   )r   r   s     r   _removeEvents._remove  s    r   c                 8    U R                   R                  5         g r-   )r   r^   )r   s    r   r^   Events._clear  s    r   r    N)FFFF)r!   r"   r#   r$   r%   staticmethodrp   classmethodr   rA   r   r^   r&   r    r   r   r   r      su    H   (  

 

    r   r   c                   H    \ rS rSrSrSrS rS r\S 5       r	\S 5       r
Srg	)
rO   i  z5Represent a connection between two _Dispatch objects.localr1   r   c                 R    Xl         X l        U R                   R                  U l        g r-   r   )r   r   r1   s      r   r4   _JoinedDispatcher.__init__  s    
!ZZ55r   c                     [        U R                  U5      n[        U R                  UR                  U5      n[        XR                  U5        U$ r-   )r<   r   r   r1   r   r7   )r   r   r3   jls       r   r8   _JoinedDispatcher.__getattr__   s=     TZZ&T[["''26ggr"	r   c                 .    U R                   R                  $ r-   )r1   rA   rB   s    r   rA   _JoinedDispatcher._listen(      {{"""r   c                 .    U R                   R                  $ r-   )r1   r@   rB   s    r   r@   _JoinedDispatcher._events,  r   r   )r   r   r1   N)r!   r"   r#   r$   r%   rM   r4   r8   rb   rA   r@   r&   r    r   r   rO   rO     s<    ?2I6
 # # # #r   rO   c                   $    \ rS rSrSrS rS rSrg)rv   i1  zDescriptor used by target classes to
deliver the _Dispatch class at the class level
and produce new _Dispatch instances for target
instances.

c                 2    UR                   U l         Xl        g r-   r   events)r   r   s     r   r4   dispatcher.__init__9  s    r   c                     Uc  U R                   $ U R                   R                  U5      n X1R                  S'   U$ ! [         a.  n[        R
                  " [        SU< S35      US9   S nAU$ S nAff = f)Nr   ztarget z> doesn't have __dict__, should it be defining _slots_dispatch?)replace_context)r   rI   r   r   r	   raise_	TypeError)r   objr   dispaes        r   __get__dispatcher.__get__=  sw    ;== }}**3/		'+LL$   	KK369 !# 	s   < 
A4#A//A4r   N)r!   r"   r#   r$   r%   r4   r   r&   r    r   r   rv   rv   1  s    r   rv   c                       \ rS rSrS rSrg)ru   iO  c                     Uc  U R                   $ [        US5      (       a  UR                  $ U R                   R                  U5      nX1l        U$ )Nrn   )r   ro   rn   rI   )r   r   r   r   s       r   r   slots_dispatcher.__get__P  sJ    ;== 3)**&&&}}**3/"r   r    N)r!   r"   r#   r$   r   r&   r    r   r   ru   ru   O  s    	r   ru   )r%   
__future__r   r`   attrr   r   r    r	   defaultdictlistrq   r   objectr   r(   rN   rd   rg   r   with_metaclassr   rO   rv   ru   r    r   r   <module>r      s   	 '  #   !  t$&O O h( h(V4 4&<R6T  V4 6r# #6 <
z 
r   