o
    E6d<                     @  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_dispatchZ	_sa_event)
startswith)r    r"   lC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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 )
_UnpickleDispatchzSerializable 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__r/   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-   r6   r"   r"   r#   _joinQ      z_DispatchCommon._joinr   r   _InstanceLevelDispatch[_ET]c                 C  r9   r:   r;   r-   r   r"   r"   r#   __getattr__T   r>   z_DispatchCommon.__getattr__Type[_HasEventsDispatch[_ET]]c                 C  r9   r:   r;   r-   r"   r"   r#   _eventsW   s   z_DispatchCommon._eventsNr6   r7   r   r8   r   r   r   r?   r   rB   )	r0   r1   r2   	__slots____annotations__r=   rA   propertyrD   r"   r"   r"   r#   r4   L   s   
 

r4   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   Z_active_historyz9MutableMapping[Type[_ET], Dict[str, _EmptyListener[_ET]]]_empty_listener_regzDict[str, _EmptyListener[_ET]]rM   z	List[str]_event_namesr5   r&   zType[_JoinedDispatcher[_ET]]_joined_dispatch_clsrB   rD   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rS   r"   r#   
<dictcomp>   s    z&_Dispatch.__init__.<locals>.<dictcomp>)rL   r&   rN   rM   KeyError_event_descriptors)r-   rQ   rS   r"   rV   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:   )rM   rX   r,   setattrr   )r-   r   rU   r"   r"   r#   rA      s   z_Dispatch.__getattr__ Iterator[_ClsLevelDispatch[_ET]]c                 c  s    | j D ]}t| |V  qd S r:   )rO   getattr)r-   kr"   r"   r#   rY      s   
z_Dispatch._event_descriptors	event_key_EventKey[_ET]kwr   Nonec                 K     | j j|fi |S r:   )rD   _listenr-   r_   ra   r"   r"   r#   rd         z_Dispatch._listenr'   r(   c                 C  s   |  | |S r:   )	__class__)r-   rS   r"   r"   r#   r+      s   z_Dispatch._for_classinstancer   c                 C  s   |j }| |S r:   )rg   r+   )r-   rh   rS   r"   r"   r#   _for_instance   s   
z_Dispatch._for_instancer6   r7   r8   c                 C  s<   d| j jvrtd| j j tfd| ji}|| j _| | |S )zCreate a 'join' of this :class:`._Dispatch` and another.

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

        rP   zJoined%srH   )rg   r*   typer0   _JoinedDispatcherrO   rP   )r-   r6   r.   r"   r"   r#   r=      s   
z_Dispatch._joinUnion[str, Tuple[Any, ...]]c                 C  s   t  | jffS r:   )r%   r&   rC   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.)rn   N)rY   
isinstancer   r]   r   
for_modify_update)r-   r6   rn   rU   r"   r"   r#   rq      s   

z_Dispatch._updatec                 C  s   | j D ]	}||   qd S r:   )rY   rp   clear)r-   rU   r"   r"   r#   _clear   s   
z_Dispatch._clearr:   )rQ   rR   rS   r5   rF   )r   r\   r_   r`   ra   r   r   rb   )rS   r'   r   r(   )rh   r   r   r(   rE   )r   rl   )T)r6   r(   rn   r   r   rb   r   rb   )r0   r1   r2   r3   rH   rI   weakrefWeakKeyDictionaryrN   rZ   rA   rJ   rY   rd   r+   ri   r=   rm   rq   rs   r"   r"   r"   r#   rK   \   s2   
 
	





rK   r.   rB   rb   c                 C  s.   | j jD ]}t| |  t| st|= qd S r:   )r    rO   r   remove)r.   r^   r"   r"   r#   _remove_dispatcher   s   ry   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_HasEventsDispatchr5   _dispatch_targetr(   r    r   r   r   r?   c                 C     d S r:   r"   r@   r"   r"   r#   rA      s   z_HasEventsDispatch.__getattr__rb   c                 C  s   |  | j| j| j dS )zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)_create_dispatcher_classr0   	__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  r9   r:   r;   )r.   r   r   r"   r"   r#   _accept_with   s   z_HasEventsDispatch._accept_withF	propagateinsertnamedasyncior_   r`   r   r   r   r   r   c                C  r9   r:   r;   r.   r_   r   r   r   r   r"   r"   r#   rd     s   
z_HasEventsDispatch._listenklassrB   dispatch_clsType[_Dispatch[_ET]]c                 C  s   |d | _ | |_| j S r:   )r    rD   )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rd	|jv rt| |_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$   )rT   r^   r"   r"   r#   
<listcomp>+  s    z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>r   z
%sDispatchrH   r{   N_slots_dispatch)hasattrr    rg   rK   r   rj   rO   r   r[   r   r   appendr~   
issubclassrD   rY   r   r]   r{   rH   slots_dispatcher
dispatcher)r.   r   r   r   Zdispatch_baseZevent_namesr   Zdispatch_instr^   Zsuper_rU   Zdispatch_target_clsr"   r"   r#   r}     s@   


	


z+_HasEventsDispatch._create_dispatcher_classNrF   ru   r   r   r   r   r   r   r_   r`   r   r   r   r   r   r   r   r   r   rb   )r   rB   r   r   r   r(   )r   r   r   r   r   r   r   rb   )r0   r1   r2   rI   typingTYPE_CHECKINGrA   r   classmethodr   rd   staticmethodr   r}   r"   r"   r"   r#   rz      s(   
 

rz   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:   )ro   r    )rT   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 )Nr8   )ro   r   r    rQ   )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    rg   rj   rk   )r.   r   r   r   r   r"   r   r#   r   P  s   


zEvents._accept_withFr   r_   r`   r   r   r   r   r   rb   c                C  s   |j ||||d d S )Nr   )Zbase_listenr   r"   r"   r#   rd   k  s   

zEvents._listenc                 C  s   |   d S r:   )rx   )r.   r_   r"   r"   r#   _removey  s   zEvents._removec                 C  s   | j   d S r:   )r    rs   r   r"   r"   r#   rs   }  s   zEvents._clearNr   r   )r_   r`   r   rb   ru   )	r0   r1   r2   r3   r   r   rd   r   rs   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 )rk   z5Represent a connection between two _Dispatch objects.localrQ   r&   r7   r   rQ   r5   r&   c                 C  s   || _ || _| j j| _d S r:   r   )r-   r   rQ   r"   r"   r#   rZ     s   z_JoinedDispatcher.__init__r   r   r   _JoinedListener[_ET]c                 C  s.   t | j|}t| j|j|}t| |j| |S r:   )r]   r   r   rQ   r   r[   )r-   r   rU   jlr"   r"   r#   rA     s   z_JoinedDispatcher.__getattr__r_   r`   ra   r   rb   c                 K  rc   r:   )rQ   rd   re   r"   r"   r#   rd     rf   z_JoinedDispatcher._listenrB   c                 C  s   | j jS r:   )rQ   rD   rC   r"   r"   r#   rD     s   z_JoinedDispatcher._eventsN)r   r7   rQ   r7   )r   r   r   r   rt   rG   )r0   r1   r2   r3   rH   rI   rZ   rA   rd   rJ   rD   r"   r"   r"   r#   rk     s   
 


rk   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   zDescriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    eventsrB   c                 C  s   |j | _ || _d S r:   )r    r   )r-   r   r"   r"   r#   rZ     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   r7   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    ri   r*   r,   	TypeError)r-   r   r.   dispZaer"   r"   r#   r     s    N)r   rB   )r   r   r.   r   r   r   )r   r   r.   r   r   r7   r   r   r.   r   r   r   )r0   r1   r2   r3   rZ   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   ri   )r-   r   r.   r   r"   r"   r#   r     s   
zslots_dispatcher.__get__Nr   )r0   r1   r2   r   r"   r"   r"   r#   r     s    r   )r   r   r   r   )r.   rB   r   rb   ),r3   
__future__r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   rv   attrr   r   r   r   registryr   r    r   Zutil.typingr   defaultdictlistr   rI   r$   r%   r4   rK   ry   rz   r   rk   r   r   r"   r"   r"   r#   <module>   sL   



 
g5 %