o
    Šåg–;  ã                   @  sâ  U d Z ddlm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mZ ddlm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 e e¡Z de!d< d8d!d"„Z"G d#d$„ d$ƒZ#G d%d&„ d&ee ƒZ$G d'd(„ d(e$e ƒZ%d9d,d-„Z&G d.d/„ d/ee ƒZ'G d0d1„ d1e$e ƒZ(G d2d3„ d3e'e ƒZ)G d4d5„ d5ee ƒZ*G d6d7„ d7e*e ƒZ+dS ):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Úboolc                 C  s   |   d¡ o	| dkp|   d¡S )NÚ_ÚdispatchÚ	_sa_event)Ú
startswith)r   © r#   úQ/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/event/base.pyÚ_is_event_name2   s   ÿþr%   c                   @  s   e Zd ZdZd	dd„ZdS )
Ú_UnpickleDispatchz�Serializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    Ú_instance_clsú	Type[_ET]r   ú_Dispatch[_ET]c                 C  s:   |j D ]}d|jv rtd|jd jƒ |¡  S qtdƒ‚)Nr    r)   z*No class with a 'dispatch' member present.)Ú__mro__Ú__dict__r   r    Ú
_for_classÚAttributeError)Úselfr'   Úclsr#   r#   r$   Ú__call__B   s   

ÿþÿz_UnpickleDispatch.__call__N)r'   r(   r   r)   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r#   r#   r#   r$   r&   <   s    r&   c                   @  s<   e Zd ZU dZded< ddd	„Zddd„Zeddd„ƒZdS )Ú_DispatchCommonr#   úOptional[Type[_ET]]r'   Úotherú_DispatchCommon[_ET]r   ú_JoinedDispatcher[_ET]c                 C  ó   t ƒ ‚©N©ÚNotImplementedError©r.   r7   r#   r#   r$   Ú_joinQ   ó   z_DispatchCommon._joinr   r   ú_InstanceLevelDispatch[_ET]c                 C  r:   r;   r<   ©r.   r   r#   r#   r$   Ú__getattr__T   r@   z_DispatchCommon.__getattr__úType[_HasEventsDispatch[_ET]]c                 C  r:   r;   r<   ©r.   r#   r#   r$   Ú_eventsW   s   z_DispatchCommon._eventsN©r7   r8   r   r9   ©r   r   r   rA   ©r   rD   )	r1   r2   r3   Ú	__slots__Ú__annotations__r?   rC   ÚpropertyrF   r#   r#   r#   r$   r5   L   s   
 

r5   c                   @  sÈ   e Zd ZU dZdZded< e ¡ Zded< ded< d	ed
< ded< ded< ded< 	 	d=d>dd„Z	d?dd„Z
ed@dd„ƒZdAd%d&„ZdBd)d*„ZdCd-d.„ZdDd2d3„ZdEd5d6„Z	7dFdGd9d:„ZdHd;d<„ZdS )IÚ	_DispatchaM  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 :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_regzDict[str, _EmptyListener[_ET]]rO   z	List[str]Ú_event_namesr6   r'   zType[_JoinedDispatcher[_ET]]Ú_joined_dispatch_clsrD   rF   NÚparentúOptional[_Dispatch[_ET]]Úinstance_clsc                   sn   || _ ˆ | _ˆ r2|d usJ ‚z	| jˆ  | _W d S  ty1   ‡ fdd„|jD ƒ | _| jˆ < Y d S w i | _d S )Nc                   s   i | ]	}|j t|ˆ ƒ“qS r#   )r   r   )Ú.0Úls©rV   r#   r$   Ú
<dictcomp>˜   s    ÿÿz&_Dispatch.__init__.<locals>.<dictcomp>)rN   r'   rQ   rO   ÚKeyErrorÚ_event_descriptors)r.   rT   rV   r#   rY   r$   Ú__init__‰   s   
þ
þÿÿ
z_Dispatch.__init__r   r   r   rA   c                 C  s8   z| j | }W n ty   t|ƒ‚w t| |j|ƒ |S r;   )rO   r[   r-   Úsetattrr   )r.   r   rX   r#   r#   r$   rC   Ÿ   s   ÿz_Dispatch.__getattr__ú Iterator[_ClsLevelDispatch[_ET]]c                 c  s   � | j D ]}t| |ƒV  qd S r;   )rR   Úgetattr)r.   Úkr#   r#   r$   r\   ª   s   €
ýz_Dispatch._event_descriptorsÚ	event_keyú_EventKey[_ET]Úkwr   ÚNonec                 K  ó   | j j|fi |¤ŽS r;   )rF   Ú_listen©r.   rb   rd   r#   r#   r$   rg   ±   ó   z_Dispatch._listenr(   r)   c                 C  s   |   | |¡S r;   )Ú	__class__)r.   rV   r#   r#   r$   r,   ´   s   z_Dispatch._for_classÚinstancer   c                 C  s   |j }|  |¡S r;   )rj   r,   )r.   rk   rV   r#   r#   r$   Ú_for_instance·   s   
z_Dispatch._for_instancer7   r8   r9   c                 C  s   d| j jv sJ ‚|  | |¡S )z¡Create a 'join' of this :class:`._Dispatch` and another.

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

        rS   )rj   r+   rS   r>   r#   r#   r$   r?   »   s   z_Dispatch._joinúUnion[str, Tuple[Any, ...]]c                 C  s   t ƒ | jffS r;   )r&   r'   rE   r#   r#   r$   Ú
__reduce__Æ   s   z_Dispatch.__reduce__TÚonly_propagatec                 C  s8   |j D ]}t|tƒrqt| |jƒ | ¡j||d� qdS )zIPopulate from the listeners in another :class:`_Dispatch`
        object.)ro   N)r\   Ú
isinstancer   r`   r   Ú
for_modifyÚ_update)r.   r7   ro   rX   r#   r#   r$   rr   É   s   

ÿýz_Dispatch._updatec                 C  s   | j D ]	}| | ¡ ¡  qd S r;   )r\   rq   Úclear)r.   rX   r#   r#   r$   Ú_clearÕ   s   
ÿz_Dispatch._clearr;   )rT   rU   rV   r6   rH   )r   r_   ©rb   rc   rd   r   r   re   )rV   r(   r   r)   )rk   r   r   r)   rG   )r   rm   )T)r7   r)   ro   r   r   re   ©r   re   )r1   r2   r3   r4   rJ   rK   ÚweakrefÚWeakKeyDictionaryrQ   r]   rC   rL   r\   rg   r,   rl   r?   rn   rr   rt   r#   r#   r#   r$   rM   \   s2   
 
þ	ý





ÿrM   r/   rD   re   c                 C  s.   | j jD ]}t|  | ¡ t| st|= qd S r;   )r    rR   r   Úremove)r/   ra   r#   r#   r$   Ú_remove_dispatcherÚ   s   €ýrz   c                   @  s€   e Zd ZU ded< 	 ded< 	 ejrd-d	d
„Zd.dd„Zed/dd„ƒZ	edddddœd0dd„ƒZ
ed1d#d$„ƒZed2d*d+„ƒZd,S )3Ú_HasEventsDispatchr6   Ú_dispatch_targetr)   r    r   r   r   rA   c                 C  ó   d S r;   r#   rB   r#   r#   r$   rC   î   s    z_HasEventsDispatch.__getattr__re   c                 C  s   |   | j| j| j¡ dS )zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)Ú_create_dispatcher_classr1   Ú	__bases__r+   ©r/   r#   r#   r$   Ú__init_subclass__ð   s   z$_HasEventsDispatch.__init_subclass__ÚtargetúUnion[_ET, Type[_ET]]Ú
identifierúOptional[Union[_ET, Type[_ET]]]c                 C  r:   r;   r<   )r/   r‚   r„   r#   r#   r$   Ú_accept_withö   s   z_HasEventsDispatch._accept_withF©Ú	propagateÚinsertÚnamedÚasynciorb   rc   rˆ   r   r‰   rŠ   r‹   c                C  r:   r;   r<   ©r/   rb   rˆ   r‰   rŠ   r‹   r#   r#   r$   rg   ü   s   
z_HasEventsDispatch._listenÚklassrD   Údispatch_clsúType[_Dispatch[_ET]]c                 C  s   |d ƒ| _ | |_| j S r;   )r    rF   )r�   rŽ   r#   r#   r$   Ú_set_dispatch  s   

z _HasEventsDispatch._set_dispatchÚ	classnameÚbasesúTuple[type, ...]Údict_úMapping[str, Any]c                 C  sD  t | dƒr
| jj}nt}dd„ |D ƒ}tdtd| |fd|iƒƒ}||_|  | |¡}|jD ]}t||t	| || ƒƒ t
|  | ¡ q-|jD ]!}	t|	tƒrf|	turf|	jjjD ]}
t||
j|
ƒ |j |
j¡ qUqEt| ddƒr‹| j}|dusvJ ‚t |dƒr†d	|jv r†t| ƒ|_nt| ƒ|_td
|j tfd|iƒ}||_|tƒ |j< dS )zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r    c                 S  s   g | ]}t |ƒr|‘qS r#   )r%   )rW   ra   r#   r#   r$   Ú
<listcomp>%  s    z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>r�   z
%sDispatchrJ   r|   NÚ_slots_dispatchzJoined%s)Úhasattrr    rj   rM   r   ÚtyperR   r�   r^   r   r   Úappendr   Ú
issubclassrF   r\   r   r`   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_classNrH   rv   ©r‚   rƒ   r„   r   r   r…   ©rb   rc   rˆ   r   r‰   r   rŠ   r   r‹   r   r   re   )r�   rD   rŽ   r�   r   r)   )r‘   r   r’   r“   r”   r•   r   re   )r1   r2   r3   rK   ÚtypingÚTYPE_CHECKINGrC   r�   Úclassmethodr†   rg   Ústaticmethodr�   r~   r#   r#   r#   r$   r{   á   s(   
 

ùr{   c                   @  sd   e Zd ZU dZdZded< ded< ded< ddd	„Zddd„Zddd„Zd dd„Z	e
d!dd„ƒZdS )"rž   z5Represent a connection between two _Dispatch objects.©ÚlocalrT   r'   r8   r¬   rT   r6   r'   c                 C  s   || _ || _| j j| _d S r;   r«   )r.   r¬   rT   r#   r#   r$   r]   Z  s   z_JoinedDispatcher.__init__r   r   c                 C  s   | j | j| jffS r;   )rj   r¬   rT   rE   r#   r#   r$   rn   a  s   z_JoinedDispatcher.__reduce__r   r   ú_JoinedListener[_ET]c                 C  s.   t | j|ƒ}t| j|j|ƒ}t| |j|ƒ |S r;   )r`   r¬   r   rT   r   r^   )r.   r   rX   Újlr#   r#   r$   rC   d  s   z_JoinedDispatcher.__getattr__rb   rc   rd   re   c                 K  rf   r;   )rT   rg   rh   r#   r#   r$   rg   l  ri   z_JoinedDispatcher._listenrD   c                 C  s   | j jS r;   )rT   rF   rE   r#   r#   r$   rF   o  s   z_JoinedDispatcher._eventsN)r¬   r8   rT   r8   )r   r   )r   r   r   r­   ru   rI   )r1   r2   r3   r4   rJ   rK   r]   rn   rC   rg   rL   rF   r#   r#   r#   r$   rž   Q  s   
 



rž   c                   @  sT   e Zd ZdZeddd	„ƒZed
d
d
d
dœddd„ƒZeddd„ƒZeddd„ƒZdS )ÚEventsz>Define event listening functions for a particular target type.r‚   rƒ   r„   r   r   r…   c                   s\   d‡ fdd„}d‡ fdd	„}t ˆ d
ƒr,|| jjƒs*|t| jjƒs*|tƒr,|| jjƒr,ˆ S d S )NÚtypesú	Type[Any]r   r   c                    s   t ‡ fdd„| D ƒƒS )Nc                 3  s   � | ]	}t ˆ j|ƒV  qd S r;   )rp   r    )rW   Út©r‚   r#   r$   Ú	<genexpr>|  s   € z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>)Úall)r°   r³   r#   r$   Údispatch_is{  s   z(Events._accept_with.<locals>.dispatch_isr²   c                   s8   t dˆ jƒj}t|tƒrt d|ƒj}t|tƒst|| ƒS )Nr9   )r   r    rT   rp   rž   )r²   rT   r³   r#   r$   Údispatch_parent_is~  s
   

ÿ
z/Events._accept_with.<locals>.dispatch_parent_isr    )r°   r±   r   r   )r²   r±   r   r   )r˜   r    rj   r™   rž   )r/   r‚   r„   r¶   r·   r#   r³   r$   r†   w  s   
	
ÿþü
ûzEvents._accept_withFr‡   rb   rc   rˆ   r   r‰   rŠ   r‹   re   c                C  s   |j ||||d� d S )Nr‡   )Úbase_listenrŒ   r#   r#   r$   rg   ”  s   

ÿzEvents._listenc                 C  s   |  ¡  d S r;   )ry   )r/   rb   r#   r#   r$   Ú_remove¢  s   zEvents._removec                 C  s   | j  ¡  d S r;   )r    rt   r€   r#   r#   r$   rt   ¦  s   zEvents._clearNr¥   r¦   )rb   rc   r   re   rv   )	r1   r2   r3   r4   r©   r†   rg   r¹   rt   r#   r#   r#   r$   r¯   t  s    ùr¯   c                   @  s@   e Zd ZdZddd„Zeddd„ƒZeddd„ƒZddd„ZdS )r�   zŸDescriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    ÚeventsrD   c                 C  s   |j | _ || _d S r;   )r    rº   )r.   rº   r#   r#   r$   r]   ³  s   
zdispatcher.__init__ÚobjúLiteral[None]r/   r±   r   r�   c                 C  r}   r;   r#   ©r.   r»   r/   r#   r#   r$   Ú__get__·  s   zdispatcher.__get__r   r8   c                 C  r}   r;   r#   r½   r#   r#   r$   r¾   ¼  s   c              
   C  sT   |d u r| j S | j  |¡}z||jd< W |S  ty) } ztd|f ƒ|‚d }~ww )Nr    zGtarget %r doesn't have __dict__, should it be defining _slots_dispatch?)r    rl   r+   r-   Ú	TypeError)r.   r»   r/   ÚdispÚaer#   r#   r$   r¾   ¿  s    ûÿÿý€ÿN)rº   rD   )r»   r¼   r/   r±   r   r�   )r»   r   r/   r±   r   r8   ©r»   r   r/   r±   r   r   )r1   r2   r3   r4   r]   r   r¾   r#   r#   r#   r$   r�   «  s    
r�   c                   @  s   e Zd Zd	dd„ZdS )
rœ   r»   r   r/   r±   r   c                 C  s4   |d u r| j S t|dƒr|jS | j  |¡}||_|S )Nr—   )r    r˜   r—   rl   )r.   r»   r/   rÀ   r#   r#   r$   r¾   Ï  s   
zslots_dispatcher.__get__NrÂ   )r1   r2   r3   r¾   r#   r#   r#   r$   rœ   Î  s    rœ   )r   r   r   r   )r/   rD   r   re   ),r4   Ú
__future__r   r§   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rw   Úattrr   r   r   r   Úregistryr   r   Ú r   Úutil.typingr   ÚdefaultdictÚlistr   rK   r%   r&   r5   rM   rz   r{   rž   r¯   r�   rœ   r#   r#   r#   r$   Ú<module>   sJ   

ÿ


~p#7#