
    g+                    P   U d Z ddlmZ ddlZddl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ZddlmZ ddlmZ ej*                  rddlmZ ddlmZ edef   Zeeeeef   f   Zeeeef   Z edd      Z G d d      Z e
d   Z! ejD                  e#      Z$de%d<   	 e
def   Z& ejD                  e#      Z'de%d<   	 d'd Z(	 	 	 	 	 	 d(d!Z)	 	 	 	 	 	 d)d"Z*	 	 	 	 	 	 	 	 d*d#Z+	 	 	 	 	 	 d+d$Z, G d% d&ee         Z-y),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`.

    )annotationsN)Any)Callable)cast)Deque)Dict)Generic)Iterable)Optional)Tuple)TypeVar)Union   )exc)util   )RefCollection)
dispatcher._ETEventTarget)boundc                       e Zd ZU dZdZded<   y)r   zrepresents an event target, that is, something we can listen on
    either with that target as a class or as an instance.

    Examples include:  Connection, Mapper, Table, Session,
    InstrumentedAttribute, Engine, Pool, Dialect.

     zdispatcher[Any]dispatchN)__name__
__module____qualname____doc__	__slots____annotations__r       X/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/event/registry.pyr   r   2   s     Ir!   )zweakref.ref[RefCollection[Any]]weakref.ref[_ListenerFnType]z6Dict[_EventKeyTupleType, _RefCollectionToListenerType]_key_to_collectionr#   z>Dict[weakref.ref[RefCollection[Any]], _ListenerToEventKeyType]_collection_to_keyc                   t         r| t         vry t        d|       } t         j                  |       }|j                         D ]=  }|t        v st        |   }|j                  |        |r)t        j                  |       ? y )Nz'weakref.ref[RefCollection[EventTarget]])r%   r   popvaluesr$   )reflistener_to_keykeydispatch_regs       r"   _collection_gcedr-   g   sw    ,>!>
8#
>C(,,S1O%%' ,$$-c2LS!"&&s+,r!   c                    | j                   }t        |   }|j                  }t        j                  | j                        }||v ry|||<   t
        |   }|||<   y)NFT)_keyr$   r)   weakref
_listen_fnr%   )	event_keyownerr+   r,   	owner_ref
listen_refr*   s          r"   _stored_in_collectionr6   x   s`     ..C%c*L		IY112JL (L(3O"%OJr!   c                   | j                   }t        |   }t        j                  | j                        }|j                  }|j                  |d        |st        |= |t        v rt        |   }|j                  |d        y y N)r/   r$   r0   r)   r1   r'   r%   )r2   r3   r+   r,   r5   r4   r*   s          r"   _removed_from_collectionr9      sy     ..C%c*LY112J		IY%s#&&,Y7
 	J- 'r!   c                "   |sy |j                   }| j                   }t        |   }t        |   }|D ]?  }t        j                   |      }	 ||   }		 t        |	   }
||
v r
|
|   |k(  sJ ||
|<   |	||<   A y # t        $ r Y Nw xY w# t        $ r Y ]w xY wr8   )r)   r%   r0   KeyErrorr$   )newowneroldownerelementsoldowner_refnewowner_refold_listener_to_keynew_listener_to_key	listen_fnr5   r+   r,   s              r"   _stored_in_collection_multirD      s    
 <<L<<L,\:,\: .	[[+
	%j1C	-c2L <'-;;;)3L&*-J''.  	 	  		s$   	A3	B3	A?>A?	BBc                    |sy | j                   }t        |   }|D ]A  }t        j                   |      }||   }t        |   }|j	                  |d        |r;t        |= C y r8   )r)   r%   r0   r$   r'   )r3   r>   r4   r*   rC   r5   r+   r,   s           r"   _clearrF      si     		I(3O (	[[+
j))#.D)"3'(r!   c                  "   e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   ded<   	 d	 	 	 	 	 	 	 	 	 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ed&d       Z	 	 	 	 	 	 d'dZ	 	 	 	 	 	 d(dZ	 	 	 	 	 	 d'dZy))	_EventKeyz$Represent :func:`.listen` arguments.)target
identifierfnfn_keyfn_wrapdispatch_targetr   rI   strrJ   _ListenerFnTyperK   _ListenerFnKeyTyperL   r   rN   Optional[_ListenerFnType]_fn_wrapNc                    || _         || _        || _        t        |t        j
                        r0t        |j                        t        |j                        f| _	        nt        |      | _	        || _
        || _        y r8   )rI   rJ   rK   
isinstancetypes
MethodTypeid__func____self__rL   rM   rN   )selfrI   rJ   rK   rN   rS   s         r"   __init__z_EventKey.__init__   s_     $b%**+R[[/2bkk?:DKR&DK.r!   c                Z    t        | j                        | j                  | j                  fS r8   )rX   rI   rJ   rL   r[   s    r"   r/   z_EventKey._key   s    4;;$++>>r!   c                    || j                   u r| S t        | j                  | j                  | j                  | j
                  |      S N)rS   )r1   rH   rI   rJ   rK   rN   )r[   rM   s     r"   with_wrapperz_EventKey.with_wrapper  sA    doo%K$$  r!   c                    || j                   u r| S t        | j                  | j                  | j                  || j
                        S r`   )rN   rH   rI   rJ   rK   rM   )r[   rN   s     r"   with_dispatch_targetz_EventKey.with_dispatch_target  sA    d222K r!   c                   |j                  dd      }|j                  dd      }|j                  dd      }| j                  | j                  | j                  }}}t	        |j
                  |      }	|	j                  ||      }
| j                  |
      } t	        | j                  j
                  j                  | j                        }t        |d      r|j                          |s|rA | j                  t        j                  | j                  |            j                  |i | y  | j                  j
                  j                  | g|i | y )NonceF_once_unless_exceptionnamed_sa_warn)retry_on_exception)r'   rN   rJ   r1   getattrr   _adjust_fn_specra   _eventshasattrrh   r   	only_oncelisten_listen)r[   argskwre   once_unless_exceptionrg   rI   rJ   rK   dispatch_collectionadjusted_fnstub_functions               r"   ro   z_EventKey.listen  s6   vvfe$ "'? Gw&   OOOO 
 &foozB)99"eD  -  ))114??
 =*-""$(DOO8M fd	" !	" 2D  ))11$DDDr!   c           	     h   | j                   }|t        vr=t        j                  d| j                  d| j
                  d| j                  d      t        j                  |      }|j                         D ]9  \  }} |       } |       }|||j                  | j                  |             ; y )NzNo listeners found for event z /  )r/   r$   r   InvalidRequestErrorrI   rJ   rK   r'   itemsremovera   )r[   r+   r,   collection_reflistener_ref
collectionlistener_fns          r"   r{   z_EventKey.remove<  s    ii(());;: 
 *--c2,8,>,>,@ 	B(NL')J&.K%+*A!!$"3"3K"@A		Br!   c                &    | j                   t        v S )z6Return True if this event key is registered to listen.)r/   r$   r^   s    r"   containsz_EventKey.containsM  s    yy...r!   c                   | j                   | j                  }}t        |j                  |      }|j	                  |j                        }	|r|	j                          |r|	j                  | |       y |	j                  | |       y r8   )rN   rJ   rj   r   
for_modify_set_asyncioinsertappend)
r[   	propagater   rg   retvalasynciorI   rJ   rt   r   s
             r"   base_listenz_EventKey.base_listenQ  sn     "114??
%foozB(33FOOD
##%dI.dI.r!   c                6    | j                   xs | j                  S r8   )rM   rK   r^   s    r"   r1   z_EventKey._listen_fnf  s    ||&tww&r!   c                T    t        | |      r|j                  | j                         yyNTF)r6   r   r1   r[   r3   list_s      r"   append_to_listz_EventKey.append_to_listj  s$    
 !u-LL)r!   c                R    t        | |       |j                  | j                         y r8   )r9   r{   r1   r   s      r"   remove_from_listz_EventKey.remove_from_listu  s    
 	!u-T__%r!   c                T    t        | |      r|j                  | j                         yyr   )r6   
appendleftr1   r   s      r"   prepend_to_listz_EventKey.prepend_to_list}  s&    
 !u-T__-r!   r8   )
rI   r   rJ   rO   rK   rP   rN   r   rS   rR   )return_EventKeyTupleType)rM   rP   r   _EventKey[_ET])rN   r   r   r   )rq   r   rr   r   r   None)r   r   )r   bool)FFFNF)r   r   r   r   rg   r   r   zOptional[bool]r   r   r   r   )r   rP   )r3   RefCollection[_ET]r   Deque[_ListenerFnType]r   r   )r3   r   r   r   r   r   )r   r   r   r   r   r    r\   propertyr/   ra   rc   ro   r{   r   r   r1   r   r   r   r   r!   r"   rH   rH      sa   .I KO'' /3// / 	/
 / ,/$ ? ?

E@B"/  !%// / 	/
 / / 
/* ' '	!	 &	 
		&!& && 
	&	!	 &	 
		r!   rH   )r)   zweakref.ref[Any]r   r   )r2   r   r3   r   r   r   )r2   r   r3   r   r   r   )r<   r   r=   r   r>   Iterable[_ListenerFnType]r   r   )r3   r   r>   r   r   r   ).r   
__future__r   collectionsrV   typingr   r   r   r   r   r	   r
   r   r   r   r   r0    r   r   TYPE_CHECKINGattrr   baser   rP   intrQ   rO   r   r   r   _RefCollectionToListenerTypedefaultdictdictr$   r    _ListenerToEventKeyTyper%   r-   r6   r9   rD   rF   rH   r   r!   r"   <module>r      s   #                 	# 38$3c3h/0 3%778  e=)   $$   KD! J 	 "  KD!   "	,"&8	*..&8.	..!. !. !. (!. 
	!.H(('( 
(&k kr!   