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__/base.cpython-310.pyc
o

���g�;�@s�UdZddlmZddlZddlmZddlmZddlmZddlmZddlmZdd	lm	Z	dd
lm
Z
ddlmZddlmZdd
lm
Z
ddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZe�e�Z de!d<d8d!d"�Z"Gd#d$�d$�Z#Gd%d&�d&ee�Z$Gd'd(�d(e$e�Z%d9d,d-�Z&Gd.d/�d/ee�Z'Gd0d1�d1e$e�Z(Gd2d3�d3e'e�Z)Gd4d5�d5ee�Z*Gd6d7�d7e*e�Z+dS):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``.

�)�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]]]]�_registrars�name�str�return�boolcCs|�d�o	|dkp|�d�S)N�_�dispatch�	_sa_event)�
startswith)r�r#�@/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/base.py�_is_event_name2s��r%c@seZdZdZd	dd�ZdS)
�_UnpickleDispatchz�Serializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    �
_instance_cls�	Type[_ET]r�_Dispatch[_ET]cCs:|jD]}d|jvrtd|jdj��|�Sqtd��)Nr r)z*No class with a 'dispatch' member present.)�__mro__�__dict__rr �
_for_class�AttributeError)�selfr'�clsr#r#r$�__call__Bs

���z_UnpickleDispatch.__call__N)r'r(rr))�__name__�
__module__�__qualname__�__doc__r0r#r#r#r$r&<sr&c@s<eZdZUdZded<ddd	�Zdd
d�Zeddd��ZdS)�_DispatchCommonr#�Optional[Type[_ET]]r'�other�_DispatchCommon[_ET]r�_JoinedDispatcher[_ET]cC�t���N��NotImplementedError�r.r7r#r#r$�_joinQ�z_DispatchCommon._joinrr�_InstanceLevelDispatch[_ET]cCr:r;r<�r.rr#r#r$�__getattr__Tr@z_DispatchCommon.__getattr__�Type[_HasEventsDispatch[_ET]]cCr:r;r<�r.r#r#r$�_eventsWsz_DispatchCommon._eventsN�r7r8rr9�rrrrA�rrD)	r1r2r3�	__slots__�__annotations__r?rC�propertyrFr#r#r#r$r5Ls


r5c@s�eZdZUdZdZded<e��Zded<ded<d	ed
<ded<d
ed<ded<		d=d>dd�Z	d?dd�Z
ed@dd��ZdAd%d&�Z
dBd)d*�ZdCd-d.�ZdDd2d3�ZdEd5d6�Z	7dFdGd9d:�ZdHd;d<�ZdS)I�	_DispatchaMMirror 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_listenersr�_active_historyz9MutableMapping[Type[_ET], Dict[str, _EmptyListener[_ET]]]�_empty_listener_regzDict[str, _EmptyListener[_ET]]rOz	List[str]�_event_namesr6r'zType[_JoinedDispatcher[_ET]]�_joined_dispatch_clsrDrFN�parent�Optional[_Dispatch[_ET]]�instance_clscsn||_�|_�r2|dusJ�z	|j�|_WdSty1�fdd�|jD�|_|j�<YdSwi|_dS)Ncsi|]	}|jt|���qSr#)rr)�.0�ls�rVr#r$�
<dictcomp>�s��z&_Dispatch.__init__.<locals>.<dictcomp>)rNr'rQrO�KeyError�_event_descriptors)r.rTrVr#rYr$�__init__�s
�
���
z_Dispatch.__init__rrrrAcCs8z|j|}Wntyt|��wt||j|�|Sr;)rOr[r-�setattrr)r.rrXr#r#r$rC�s�z_Dispatch.__getattr__� Iterator[_ClsLevelDispatch[_ET]]ccs�|jD]}t||�VqdSr;)rR�getattr)r.�kr#r#r$r\�s�
�z_Dispatch._event_descriptors�	event_key�_EventKey[_ET]�kwr�NonecK�|jj|fi|��Sr;)rF�_listen�r.rbrdr#r#r$rg��z_Dispatch._listenr(r)cCs|�||�Sr;)�	__class__)r.rVr#r#r$r,�sz_Dispatch._for_class�instancercCs|j}|�|�Sr;)rjr,)r.rkrVr#r#r$�
_for_instance�s
z_Dispatch._for_instancer7r8r9cCsd|jjvsJ�|�||�S)z�Create a 'join' of this :class:`._Dispatch` and another.

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

        rS)rjr+rSr>r#r#r$r?�sz_Dispatch._join�Union[str, Tuple[Any, ...]]cCst�|jffSr;)r&r'rEr#r#r$�
__reduce__�sz_Dispatch.__reduce__T�only_propagatecCs8|jD]}t|t�rqt||j��|�j||d�qdS)zIPopulate from the listeners in another :class:`_Dispatch`
        object.)roN)r\�
isinstancerr`r�
for_modify�_update)r.r7rorXr#r#r$rr�s

��z_Dispatch._updatecCs|jD]	}|�|���qdSr;)r\rq�clear)r.rXr#r#r$�_clear�s
�z_Dispatch._clearr;)rTrUrVr6rH)rr_�rbrcrdrrre)rVr(rr))rkrrr)rG)rrm)T)r7r)rorrre�rre)r1r2r3r4rJrK�weakref�WeakKeyDictionaryrQr]rCrLr\rgr,rlr?rnrrrtr#r#r#r$rM\s2

�	�





�rMr/rDrecCs.|jjD]}t|�|�t|st|=qdSr;)r rRr�remove)r/rar#r#r$�_remove_dispatcher�s��rzc@s�eZdZUded<	ded<	ejrd-d	d
�Zd.dd
�Zed/dd��Z	eddddd�d0dd��Z
ed1d#d$��Zed2d*d+��Z
d,S)3�_HasEventsDispatchr6�_dispatch_targetr)r rrrrAcC�dSr;r#rBr#r#r$rC�sz_HasEventsDispatch.__getattr__recCs|�|j|j|j�dS)zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)�_create_dispatcher_classr1�	__bases__r+�r/r#r#r$�__init_subclass__�sz$_HasEventsDispatch.__init_subclass__�target�Union[_ET, Type[_ET]]�
identifier�Optional[Union[_ET, Type[_ET]]]cCr:r;r<)r/r�r�r#r#r$�_accept_with�sz_HasEventsDispatch._accept_withF��	propagate�insert�named�asynciorbrcr�rr�r�r�cCr:r;r<�r/rbr�r�r�r�r#r#r$rg�s
z_HasEventsDispatch._listen�klassrD�dispatch_cls�Type[_Dispatch[_ET]]cCs|d�|_||_|jSr;)r rF)r�r�r#r#r$�
_set_dispatchs

z _HasEventsDispatch._set_dispatch�	classname�bases�Tuple[type, ...]�dict_�Mapping[str, Any]c
CsDt|d�r
|jj}nt}dd�|D�}tdtd||fd|i��}||_|�||�}|jD]}t||t	|||��t
|�|�q-|jD]!}	t
|	t�rf|	turf|	jjjD]}
t||
j|
�|j�|
j�qUqEt|dd�r�|j}|dusvJ�t|d�r�d	|jvr�t|�|_nt|�|_td
|jtfd|i�}||_|t�|j<dS)zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r cSsg|]}t|�r|�qSr#)r%)rWrar#r#r$�
<listcomp>%sz?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>r�z
%sDispatchrJr|N�_slots_dispatchzJoined%s)�hasattrr rjrMr�typerRr�r^rr�appendr�
issubclassrFr\rr`r|rJ�slots_dispatcher�
dispatcherr1�_JoinedDispatcherrS�globals)
r/r�r�r��
dispatch_base�event_namesr��
dispatch_instra�super_rX�dispatch_target_clsr�r#r#r$r~sL


��	

��

�z+_HasEventsDispatch._create_dispatcher_classNrHrv�r�r�r�rrr��rbrcr�rr�rr�rr�rrre)r�rDr�r�rr))r�rr�r�r�r�rre)r1r2r3rK�typing�
TYPE_CHECKINGrCr��classmethodr�rg�staticmethodr�r~r#r#r#r$r{�s(


�
r{c@sdeZdZUdZdZded<ded<ded<ddd	�Zddd
�Zddd�Zd dd�Z	e
d!dd��ZdS)"r�z5Represent a connection between two _Dispatch objects.��localrTr'r8r�rTr6r'cCs||_||_|jj|_dSr;r�)r.r�rTr#r#r$r]Zsz_JoinedDispatcher.__init__rrcCs|j|j|jffSr;)rjr�rTrEr#r#r$rnasz_JoinedDispatcher.__reduce__rr�_JoinedListener[_ET]cCs.t|j|�}t|j|j|�}t||j|�|Sr;)r`r�rrTrr^)r.rrX�jlr#r#r$rCdsz_JoinedDispatcher.__getattr__rbrcrdrecKrfr;)rTrgrhr#r#r$rglriz_JoinedDispatcher._listenrDcCs|jjSr;)rTrFrEr#r#r$rFosz_JoinedDispatcher._eventsN)r�r8rTr8)rr)rrrr�rurI)r1r2r3r4rJrKr]rnrCrgrLrFr#r#r#r$r�Qs




r�c@sTeZdZdZeddd	��Zed
d
d
d
d�ddd��Zeddd��Zeddd��ZdS)�Eventsz>Define event listening functions for a particular target type.r�r�r�rrr�cs\d�fdd�}d�fdd	�}t�d
�r,||jj�s*|t|jj�s*|t�r,||jj�r,�SdS)
N�types�	Type[Any]rrcst�fdd�|D��S)Nc3s�|]	}t�j|�VqdSr;)rpr )rW�t�r�r#r$�	<genexpr>|s�z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>)�all)r�r�r#r$�dispatch_is{sz(Events._accept_with.<locals>.dispatch_isr�cs8td�j�j}t|t�rtd|�j}t|t�st||�S)Nr9)rr rTrpr�)r�rTr�r#r$�dispatch_parent_is~s


�
z/Events._accept_with.<locals>.dispatch_parent_isr )r�r�rr)r�r�rr)r�r rjr�r�)r/r�r�r�r�r#r�r$r�ws
	
���
�zEvents._accept_withFr�rbrcr�rr�r�r�recCs|j||||d�dS)Nr�)�base_listenr�r#r#r$rg�s

�zEvents._listencCs|��dSr;)ry)r/rbr#r#r$�_remove�szEvents._removecCs|j��dSr;)r rtr�r#r#r$rt�sz
Events._clearNr�r�)rbrcrrerv)	r1r2r3r4r�r�rgr�rtr#r#r#r$r�ts�
r�c@s@eZdZdZddd�Zeddd
��Zeddd
��Zddd
�ZdS)r�z�Descriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    �eventsrDcCs|j|_||_dSr;)r r�)r.r�r#r#r$r]�s
zdispatcher.__init__�obj�
Literal[None]r/r�rr�cCr}r;r#�r.r�r/r#r#r$�__get__�szdispatcher.__get__rr8cCr}r;r#r�r#r#r$r��sc
CsT|dur|jS|j�|�}z||jd<W|Sty)}ztd|f�|�d}~ww)Nr zGtarget %r doesn't have __dict__, should it be defining _slots_dispatch?)r rlr+r-�	TypeError)r.r�r/�disp�aer#r#r$r��s ������N)r�rD)r�r�r/r�rr�)r�rr/r�rr8�r�rr/r�rr)r1r2r3r4r]rr�r#r#r#r$r��s
r�c@seZdZd	dd�ZdS)
r�r�rr/r�rcCs4|dur|jSt|d�r|jS|j�|�}||_|S)Nr�)r r�r�rl)r.r�r/r�r#r#r$r��s
zslots_dispatcher.__get__Nr�)r1r2r3r�r#r#r#r$r��sr�)rrrr)r/rDrre),r4�
__future__rr�rrrrrrr	r
rrr
rrrw�attrrrrr�registryrr�r�util.typingr�defaultdict�listrrKr%r&r5rMrzr{r�r�r�r�r#r#r#r$�<module>sJ

�


~p#7#