HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/event/__pycache__/registry.cpython-310.pyc
o

���g�+�@s�UdZddlmZddlZddlZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
dd	lmZdd
lmZddlm
Z
ddlmZdd
lmZddlmZddlZddlmZddlmZejrvddlmZddlmZedefZeeeeeffZeeeefZeddd�ZGdd�d�Z e
dZ!e�"e#�Z$de%d<	e
defZ&e�"e#�Z'de%d<	d9d$d%�Z(d:d+d,�Z)d;d-d.�Z*d<d3d4�Z+d=d5d6�Z,Gd7d8�d8ee�Z-dS)>aJProvides 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@seZdZUdZdZded<dS)rz�represents 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.

    �zdispatcher[Any]�dispatchN)�__name__�
__module__�__qualname__�__doc__�	__slots__�__annotations__rrr�D/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/registry.pyr2s
)zweakref.ref[RefCollection[Any]]�weakref.ref[_ListenerFnType]z6Dict[_EventKeyTupleType, _RefCollectionToListenerType]�_key_to_collectionr z>Dict[weakref.ref[RefCollection[Any]], _ListenerToEventKeyType]�_collection_to_key�ref�weakref.ref[Any]�return�NonecCs^tr|tvrdStd|�}t�|�}|��D]}|tvr,t|}|�|�|s,t�|�qdS)Nz'weakref.ref[RefCollection[EventTarget]])r"r�pop�valuesr!)r#�listener_to_key�key�dispatch_regrrr�_collection_gcedgs



��r,�	event_key�_EventKey[_ET]�owner�RefCollection[_ET]�boolcCsH|j}t|}|j}t�|j�}||vrdS|||<t|}|||<dS)NFT)�_keyr!r#�weakref�
_listen_fnr")r-r/r*r+�	owner_ref�
listen_refr)rrr�_stored_in_collectionxsr7cCsZ|j}t|}t�|j�}|j}|�|d�|st|=|tvr+t|}|�|d�dSdS�N)r2r!r3r#r4r'r")r-r/r*r+r6r5r)rrr�_removed_from_collection�s�r9�newowner�oldowner�elements�Iterable[_ListenerFnType]c	Cs�|sdS|j}|j}t|}t|}|D]<}t�|�}z||}	Wn	ty*Yqwzt|	}
Wn	ty:Yqw||
vrH|
||ksGJ�n||
|<|	||<qdSr8)r#r"r3�KeyErrorr!)r:r;r<�oldowner_ref�newowner_ref�old_listener_to_key�new_listener_to_key�	listen_fnr6r*r+rrr�_stored_in_collection_multi�s.
��
�rDcCsT|sdS|j}t|}|D]}t�|�}||}t|}|�|d�|s't|=q
dSr8)r#r"r3r!r')r/r<r5r)rCr6r*r+rrr�_clear�s
��rEc@s�eZdZUdZdZded<ded<ded<d	ed
<ded<d
ed<	d;d<dd�Zed=dd��Zd>dd�Z	d?dd�Z
d@dd �ZdAd!d"�ZdBd$d%�Z
	&	&	&		&dCdDd-d.�ZedEd/d0��ZdFd5d6�ZdGd7d8�ZdFd9d:�ZdS)H�	_EventKeyz$Represent :func:`.listen` arguments.)�target�
identifier�fn�fn_key�fn_wrap�dispatch_targetrrG�strrH�_ListenerFnTyperI�_ListenerFnKeyTyperJrrL�Optional[_ListenerFnType]�_fn_wrapNcCsP||_||_||_t|tj�rt|j�t|j�f|_	nt|�|_	||_
||_dSr8)rGrHrI�
isinstance�types�
MethodType�id�__func__�__self__rJrKrL)�selfrGrHrIrLrQrrr�__init__�s

z_EventKey.__init__r%�_EventKeyTupleTypecCst|j�|j|jfSr8)rUrGrHrJ�rXrrrr2sz_EventKey._keyrKr.cCs(||jur|St|j|j|j|j|d�S�N)rQ)r4rFrGrHrIrL)rXrKrrr�with_wrappers
�z_EventKey.with_wrappercCs(||jur|St|j|j|j||jd�Sr\)rLrFrGrHrIrK)rXrLrrr�with_dispatch_targets
�z_EventKey.with_dispatch_target�args�kwr&cOs�|�dd�}|�dd�}|�dd�}|j|j|j}}}t|j|�}	|	�||�}
|�|
�}t|jjj|j�}t	|d�r@|�
�|sD|rW|�tj|j|d��j
|i|��dS|jjj|g|�Ri|��dS)N�onceF�_once_unless_exception�named�_sa_warn)�retry_on_exception)r'rLrHr4�getattrr�_adjust_fn_specr]�_events�hasattrrdr�	only_once�listen�_listen)rXr_r`ra�once_unless_exceptionrcrGrHrI�dispatch_collection�adjusted_fn�
stub_functionrrrrks4
�
�
���
� z_EventKey.listencCst|j}|tvrt�d|j|j|jf��t�|�}|��D]\}}|�}|�}|dur7|dur7|�	|�
|��qdS)Nz*No listeners found for event %s / %r / %s )r2r!r�InvalidRequestErrorrGrHrIr'�items�remover])rXr*r+�collection_ref�listener_ref�
collection�listener_fnrrrrs<s��
��z_EventKey.remover1cCs
|jtvS)z6Return True if this event key is registered to listen.)r2r!r[rrr�containsMs
z_EventKey.containsF�	propagate�insertrc�retval�Optional[bool]�asyncioc
CsV|j|j}}t|j|�}|�|j�}	|r|	��|r#|	�||�dS|	�||�dSr8)rLrHrfr�
for_modify�_set_asynciorz�append)
rXryrzrcr{r}rGrHrnr~rrr�base_listenQsz_EventKey.base_listencCs|jp|jSr8)rKrIr[rrrr4fsz_EventKey._listen_fnr/r0�list_�Deque[_ListenerFnType]cC�t||�r
|�|j�dSdS�NTF)r7r�r4�rXr/r�rrr�append_to_listj�
z_EventKey.append_to_listcCst||�|�|j�dSr8)r9rsr4r�rrr�remove_from_listus
z_EventKey.remove_from_listcCr�r�)r7�
appendleftr4r�rrr�prepend_to_list}r�z_EventKey.prepend_to_listr8)
rGrrHrMrIrNrLrrQrP)r%rZ)rKrNr%r.)rLrr%r.)r_rr`rr%r&)r%r&)r%r1)FFFNF)ryr1rzr1rcr1r{r|r}r1r%r&)r%rN)r/r0r�r�r%r1)r/r0r�r�r%r&)rrrrrrrY�propertyr2r]r^rkrsrxr�r4r�r�r�rrrrrF�s:
	�



 
�

rF)r#r$r%r&)r-r.r/r0r%r1)r-r.r/r0r%r&)r:r0r;r0r<r=r%r&)r/r0r<r=r%r&).r�
__future__r�collectionsrS�typingrrrrrrr	r
rrr
r3�rr�
TYPE_CHECKING�attrr�baserrN�intrOrMrZrr�_RefCollectionToListenerType�defaultdict�dictr!r�_ListenerToEventKeyTyper"r,r7r9rDrErFrrrr�<module>s^	�
���
�




$