o
    ?ÊÆh„:  ã                   @  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#   úb/var/www/html/HyperOracle/crypto_trader/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   r@   ©r   rC   )	r1   r2   r3   Ú	__slots__Ú__annotations__r>   rB   ÚpropertyrE   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]]rN   z	List[str]Ú_event_namesr6   r'   zType[_JoinedDispatcher[_ET]]Ú_joined_dispatch_clsrC   rE   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©rU   r#   r$   Ú
<dictcomp>˜   s    ÿÿz&_Dispatch.__init__.<locals>.<dictcomp>)rM   r'   rP   rN   ÚKeyErrorÚ_event_descriptors)r.   rS   rU   r#   rX   r$   Ú__init__‰   s   
þ
þÿÿ
z_Dispatch.__init__r   r   r   r@   c                 C  s8   z| j | }W n ty   t|ƒ‚w t| |j|ƒ |S r;   )rN   rZ   r-   Úsetattrr   )r.   r   rW   r#   r#   r$   rB   Ÿ   s   ÿz_Dispatch.__getattr__ú Iterator[_ClsLevelDispatch[_ET]]c                 c  s   � | j D ]}t| |ƒV  qd S r;   )rQ   Úgetattr)r.   Úkr#   r#   r$   r[   ª   s   €
ýz_Dispatch._event_descriptorsÚ	event_keyú_EventKey[_ET]Úkwr   ÚNonec                 K  ó   | j j|fi |¤ŽS r;   )rE   Ú_listen©r.   ra   rc   r#   r#   r$   rf   ±   ó   z_Dispatch._listenr(   r)   c                 C  s   |   | |¡S r;   )Ú	__class__)r.   rU   r#   r#   r$   r,   ´   s   z_Dispatch._for_classÚinstancer   c                 C  s   |j }|  |¡S r;   )ri   r,   )r.   rj   rU   r#   r#   r$   Ú_for_instance·   s   
z_Dispatch._for_instancer7   r8   r9   c                 C  s<   d| j jvrtd| j j tfd| jiƒ}|| j _|  | |¡S )z¡Create a 'join' of this :class:`._Dispatch` and another.

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

        rR   zJoined%srI   )ri   r+   Útyper1   Ú_JoinedDispatcherrQ   rR   )r.   r7   r/   r#   r#   r$   r>   »   s   
ýz_Dispatch._joinúUnion[str, Tuple[Any, ...]]c                 C  s   t ƒ | jffS r;   )r&   r'   rD   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.)rp   N)r[   Ú
isinstancer   r_   r   Ú
for_modifyÚ_update)r.   r7   rp   rW   r#   r#   r$   rs   Î   s   

ÿýz_Dispatch._updatec                 C  s   | j D ]	}| | ¡ ¡  qd S r;   )r[   rr   Úclear)r.   rW   r#   r#   r$   Ú_clearÚ   s   
ÿz_Dispatch._clearr;   )rS   rT   rU   r6   rG   )r   r^   ©ra   rb   rc   r   r   rd   )rU   r(   r   r)   )rj   r   r   r)   rF   )r   rn   )T)r7   r)   rp   r   r   rd   ©r   rd   )r1   r2   r3   r4   rI   rJ   ÚweakrefÚWeakKeyDictionaryrP   r\   rB   rK   r[   rf   r,   rk   r>   ro   rs   ru   r#   r#   r#   r$   rL   \   s2   
 
þ	ý





ÿrL   r/   rC   rd   c                 C  s.   | j jD ]}t|  | ¡ t| st|= qd S r;   )r    rQ   r   Úremove)r/   r`   r#   r#   r$   Ú_remove_dispatcherß   s   €ýr{   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   r@   c                 C  ó   d S r;   r#   rA   r#   r#   r$   rB   ó   s   z_HasEventsDispatch.__getattr__rd   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Úasynciora   rb   r‰   r   rŠ   r‹   rŒ   c                C  r:   r;   r<   ©r/   ra   r‰   rŠ   r‹   rŒ   r#   r#   r$   rf     s   
z_HasEventsDispatch._listenÚklassrC   Údispatch_clsúType[_Dispatch[_ET]]c                 C  s   |d ƒ| _ | |_| j S r;   )r    rE   )rŽ   r�   r#   r#   r$   Ú_set_dispatch  s   

z _HasEventsDispatch._set_dispatchÚ	classnameÚbasesúTuple[type, ...]Údict_úMapping[str, Any]c                 C  s   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| ƒ|_dS t| ƒ|_dS dS )
zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r    c                 S  s   g | ]}t |ƒr|‘qS r#   )r%   )rV   r`   r#   r#   r$   Ú
<listcomp>+  s    z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>r�   z
%sDispatchrI   r}   NÚ_slots_dispatch)Úhasattrr    ri   rL   r   rl   rQ   r‘   r]   r   r   Úappendr€   Ú
issubclassrE   r[   r   r_   r}   rI   Úslots_dispatcherÚ
dispatcher)r/   r’   r“   r•   Údispatch_baseÚevent_namesr�   Údispatch_instr`   Úsuper_rW   Údispatch_target_clsr#   r#   r$   r     s@   


ýþ	

€ÿ
÷z+_HasEventsDispatch._create_dispatcher_classNrG   rw   ©rƒ   r„   r…   r   r   r†   ©ra   rb   r‰   r   rŠ   r   r‹   r   rŒ   r   r   rd   )rŽ   rC   r�   r�   r   r)   )r’   r   r“   r”   r•   r–   r   rd   )r1   r2   r3   rJ   ÚtypingÚTYPE_CHECKINGrB   r‚   Úclassmethodr‡   rf   Ústaticmethodr‘   r   r#   r#   r#   r$   r|   æ   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;   )rq   r    )rV   Út©rƒ   r#   r$   Ú	<genexpr>U  s   € z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>)Úall)rª   r­   r#   r$   Údispatch_isT  s   z(Events._accept_with.<locals>.dispatch_isr¬   c                   s   t tdˆ jƒj| ƒS )Nr9   )rq   r   r    rS   )r¬   r­   r#   r$   Údispatch_parent_isW  s   ÿz/Events._accept_with.<locals>.dispatch_parent_isr    )rª   r«   r   r   )r¬   r«   r   r   )r™   r    ri   rl   rm   )r/   rƒ   r…   r°   r±   r#   r­   r$   r‡   P  s   

ÿþü
ûzEvents._accept_withFrˆ   ra   rb   r‰   r   rŠ   r‹   rŒ   rd   c                C  s   |j ||||d� d S )Nrˆ   )Úbase_listenr�   r#   r#   r$   rf   k  s   

ÿzEvents._listenc                 C  s   |  ¡  d S r;   )rz   )r/   ra   r#   r#   r$   Ú_removey  s   zEvents._removec                 C  s   | j  ¡  d S r;   )r    ru   r�   r#   r#   r$   ru   }  s   zEvents._clearNr£   r¤   )ra   rb   r   rd   rw   )	r1   r2   r3   r4   r§   r‡   rf   r³   ru   r#   r#   r#   r$   r©   M  s    ùr©   c                   @  sZ   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e	ddd„ƒZ
dS )rm   z5Represent a connection between two _Dispatch objects.©ÚlocalrS   r'   r8   rµ   rS   r6   r'   c                 C  s   || _ || _| j j| _d S r;   r´   )r.   rµ   rS   r#   r#   r$   r\   ‹  s   z_JoinedDispatcher.__init__r   r   r   ú_JoinedListener[_ET]c                 C  s.   t | j|ƒ}t| j|j|ƒ}t| |j|ƒ |S r;   )r_   rµ   r   rS   r   r]   )r.   r   rW   Újlr#   r#   r$   rB   ’  s   z_JoinedDispatcher.__getattr__ra   rb   rc   r   rd   c                 K  re   r;   )rS   rf   rg   r#   r#   r$   rf   š  rh   z_JoinedDispatcher._listenrC   c                 C  s   | j jS r;   )rS   rE   rD   r#   r#   r$   rE   �  s   z_JoinedDispatcher._eventsN)rµ   r8   rS   r8   )r   r   r   r¶   rv   rH   )r1   r2   r3   r4   rI   rJ   r\   rB   rf   rK   rE   r#   r#   r#   r$   rm   ‚  s   
 


rm   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.

    ÚeventsrC   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    rk   r+   r-   Ú	TypeError)r.   r¹   r/   ÚdispÚaer#   r#   r$   r¼   ¸  s    ûÿÿý€ÿN)r¸   rC   )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˜   rk   )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/   rC   r   rd   ),r4   Ú
__future__r   r¥   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rx   Úattrr   r   r   r   Úregistryr   r   Ú r   Úutil.typingr   ÚdefaultdictÚlistr   rJ   r%   r&   r5   rL   r{   r|   r©   rm   r�   rœ   r#   r#   r#   r$   Ú<module>   sL   

þ

 
g5 %