
    -h&!                         S r SSKJr  SSKrSSKrSSKrSSKJr  SSKJr  \R                  " \
5      r \R                  " \
5      r S rS rS	 rS
 rS r " S S\5      rg)aJ  Provides managed registration services on behalf of :func:`.listen`
arguments.

By "managed registration", we mean that event listening functions and
other objects can be added to various collections in such a way that their
membership in all those collections can be revoked at once, based on
an equivalent :class:`._EventKey`.

    )absolute_importN   )exc)utilc                    [         (       a
  U [         ;  a  g [         R                  U 5      nUR                  5        HG  nU[        ;   d  M  [        U   nUR                  U 5        U(       a  M2  [        R                  U5        MI     g N)_collection_to_keypopvalues_key_to_collection)reflistener_to_keykeydispatch_regs       nC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/event/registry.py_collection_gcedr   5   sj    ,>!>(,,S1O%%'$$-c2LS!<"&&s+ (    c                     U R                   n[        U   nUR                  n[        R                  " U R                  5      nXC;   a  gXSU'   [
        U   nX&U'   g)NFT)_keyr   r   weakref
_listen_fnr	   )	event_keyownerr   r   	owner_ref
listen_refr   s          r   _stored_in_collectionr   C   sX    
..C%c*L		IY112J ((3O"%Jr   c                    U R                   n[        U   n[        R                  " U R                  5      nUR                  nUR                  US 5        U(       d  [        U	 U[        ;   a  [        U   nUR                  U5        g g r   )r   r   r   r   r   r
   r	   )r   r   r   r   r   r   r   s          r   _removed_from_collectionr   V   ss    
..C%c*LY112J		IY%s#&&,Y7J' 'r   c                 8   U(       d  g UR                   nU R                   n [        U   n[        U    nU H@  n[        R                   " U5      n X6   n [        U   nX;   a  X   U:X  d   eOXhU '   XtU'   MB     g ! [         a     MR  f = f! [         a     Mc  f = fr   )r   r	   r   KeyErrorr   )	newowneroldownerelementsold_listener_to_keynew_listener_to_key	listen_fnr   r   r   s	            r   _stored_in_collection_multir'   g   s    ||H||H,X6,X6	[[+
	%1C	-c2L #)Z777%/"*-J''   	 	  		s$   A:	B:
BB
BBc                     U(       d  g U R                   n [        U    nU HH  n[        R                   " U5      nX$   n[        U   nUR	                  U S 5        U(       a  MA  [        U	 MJ     g r   )r   r	   r   r   r
   )r   r#   r   r&   r   r   r   s          r   _clearr)      sb    IIE(/O	[[+
))#.%|"3' r   c                       \ rS rSrSrSrSS jr\S 5       rS r	S r
S	 rS
 rS r     SS jr\S 5       rS rS rS rSrg)	_EventKey   z$Represent :func:`.listen` arguments.)target
identifierfnfn_keyfn_wrapdispatch_targetNc                     Xl         X l        X0l        [        U[        R
                  5      (       a0  [        UR                  5      [        UR                  5      4U l	        O[        U5      U l	        XPl
        X@l        g r   )r-   r.   r/   
isinstancetypes
MethodTypeid__func____self__r0   r1   r2   )selfr-   r.   r/   r2   _fn_wraps         r   __init___EventKey.__init__   sV    $b%**++R[[/2bkk?:DKR&DK.r   c                 Z    [        U R                  5      U R                  U R                  4$ r   )r7   r-   r.   r0   r:   s    r   r   _EventKey._key   s    4;;$++>>r   c                     XR                   L a  U $ [        U R                  U R                  U R                  U R
                  US9$ N)r;   )r   r+   r-   r.   r/   r2   )r:   r1   s     r   with_wrapper_EventKey.with_wrapper   s?    oo%K$$  r   c                     XR                   L a  U $ [        U R                  U R                  U R                  UU R
                  S9$ rB   )r2   r+   r-   r.   r/   r1   )r:   r2   s     r   with_dispatch_target_EventKey.with_dispatch_target   s?    222K r   c                    UR                  SS5      nUR                  SS5      nUR                  SS5      nU R                  U R                  U R                  pn[	        UR
                  U5      n	U	R                  X5      n
U R                  U
5      n [	        U R                  R
                  R                  U R                  5      n[        US5      (       a  UR                  5         U(       d  U(       a?  U R                  [        R                  " U R                  US95      R                  " U0 UD6  g U R                  R
                  R                  " U /UQ70 UD6  g )NonceF_once_unless_exceptionnamed_sa_warn)retry_on_exception)r
   r2   r.   r   getattrdispatch_adjust_fn_specrC   _eventshasattrrL   r   	only_oncelisten_listen)r:   argskwrI   once_unless_exceptionrK   r-   r.   r/   dispatch_collectionadjusted_fnstub_functions               r   rT   _EventKey.listen   s7   vvfe$ "'? Gw&   OOOO  &foozB)99"D  -  ))114??
 =*--""$(OO8M f	 	" !	"   ))11$DDDr   c           	      ~   U R                   nU[        ;  aA  [        R                  " SU R                  < SU R
                  < SU R                  < S35      e[        R                  U5      nUR                  5        H=  u  p4U" 5       nU" 5       nUc  M  Uc  M  UR                  U R                  U5      5        M?     g )NzNo listeners found for event z /  )r   r   r   InvalidRequestErrorr-   r.   r/   r
   itemsremoverC   )r:   r   r   collection_reflistener_ref
collectionlistener_fns          r   ra   _EventKey.remove   s    ii(());;: 
 *--c2,8,>,>,@(N')J&.K%+*A!!$"3"3K"@A	 -Ar   c                 (    U R                   [        ;   $ )z6Return True if this event key is registered to listen.)r   r   r?   s    r   contains_EventKey.contains   s    yy...r   c                    U R                   U R                  pv[        UR                  U5      nUR	                  UR                  5      n	U(       a  U	R                  5         U(       a  U	R                  X5        g U	R                  X5        g r   )r2   r.   rN   rO   
for_modify_set_asyncioinsertappend)
r:   	propagaterm   rK   retvalasyncior-   r.   rY   rk   s
             r   base_listen_EventKey.base_listen   sh     "114??
%foozB(33FOOD
##%d.d.r   c                 @    U R                   =(       d    U R                  $ r   )r1   r/   r?   s    r   r   _EventKey._listen_fn  s    ||&tww&r   c                 \    [        X5      (       a  UR                  U R                  5        ggNTF)r   rn   r   r:   r   list_s      r   append_to_list_EventKey.append_to_list  s#     --LL)r   c                 P    [        X5        UR                  U R                  5        g r   )r   ra   r   rx   s      r   remove_from_list_EventKey.remove_from_list   s     -T__%r   c                 \    [        X5      (       a  UR                  U R                  5        ggrw   )r   
appendleftr   rx   s      r   prepend_to_list_EventKey.prepend_to_list$  s%     --T__-r   )r2   r/   r0   r1   r.   r-   r   )FFFNF)__name__
__module____qualname____firstlineno____doc__	__slots__r<   propertyr   rC   rF   rT   ra   rh   rr   r   rz   r}   r   __static_attributes__ r   r   r+   r+      sz    .I	/ ? ?

E@B"/ /, ' '&r   r+   )r   
__future__r   collectionsr5   r    r   r   defaultdictdictr   r	   r   r   r   r'   r)   objectr+   r   r   r   <module>r      sv    '      !,,T2 	 !,,T2 	,&(".@( R Rr   