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_dispatchZ	_sa_event)
startswith)r    r"   ]/var/www/html/figdemos/bartoux_crm/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 )
_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   rC   )	r0   r1   r2   	__slots____annotations__r>   rB   propertyrE   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]]rN   z	List[str]_event_namesr5   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rT   r"   r#   
<dictcomp>   s    z&_Dispatch.__init__.<locals>.<dictcomp>)rM   r&   rO   rN   KeyError_event_descriptors)r-   rR   rT   r"   rW   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   rY   r,   setattrr   )r-   r   rV   r"   r"   r#   rB      s   z_Dispatch.__getattr__ Iterator[_ClsLevelDispatch[_ET]]c                 c  s    | j D ]}t| |V  qd S r:   )rP   getattr)r-   kr"   r"   r#   rZ      s   
z_Dispatch._event_descriptors	event_key_EventKey[_ET]kwr   Nonec                 K     | j j|fi |S r:   )rE   _listenr-   r`   rb   r"   r"   r#   re         z_Dispatch._listenr'   r(   c                 C  s   |  | |S r:   )	__class__)r-   rT   r"   r"   r#   r+      s   z_Dispatch._for_classinstancer   c                 C  s   |j }| |S r:   )rh   r+   )r-   ri   rT   r"   r"   r#   _for_instance   s   
z_Dispatch._for_instancer6   r7   r8   c                 C  s   d| j jv sJ | | |S )zCreate a 'join' of this :class:`._Dispatch` and another.

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

        rQ   )rh   r*   rQ   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.)rm   N)rZ   
isinstancer   r^   r   
for_modify_update)r-   r6   rm   rV   r"   r"   r#   rp      s   

z_Dispatch._updatec                 C  s   | j D ]	}||   qd S r:   )rZ   ro   clear)r-   rV   r"   r"   r#   _clear   s   
z_Dispatch._clearr:   )rR   rS   rT   r5   rG   )r   r]   r`   ra   rb   r   r   rc   )rT   r'   r   r(   )ri   r   r   r(   rF   )r   rk   )T)r6   r(   rm   r   r   rc   r   rc   )r0   r1   r2   r3   rI   rJ   weakrefWeakKeyDictionaryrO   r[   rB   rK   rZ   re   r+   rj   r>   rl   rp   rr   r"   r"   r"   r#   rL   \   s2   
 
	





rL   r.   rC   rc   c                 C  s.   | j jD ]}t| |  t| st|= qd S r:   )r    rP   r   remove)r.   r_   r"   r"   r#   _remove_dispatcher   s   rx   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"   rA   r"   r"   r#   rB      s    z_HasEventsDispatch.__getattr__rc   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`   ra   r   r   r   r   r   c                C  r9   r:   r;   r.   r`   r   r   r   r   r"   r"   r#   re      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  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rd	|jv rt| |_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$   )rU   r_   r"   r"   r#   
<listcomp>%  s    z?_HasEventsDispatch._create_dispatcher_class.<locals>.<listcomp>r   z
%sDispatchrI   rz   N_slots_dispatchzJoined%s)hasattrr    rh   rL   r   typerP   r   r\   r   r   appendr}   
issubclassrE   rZ   r   r^   rz   rI   slots_dispatcher
dispatcherr0   _JoinedDispatcherrQ   globals)r.   r   r   r   Zdispatch_baseZevent_namesr   Zdispatch_instr_   super_rV   Zdispatch_target_clsr   r"   r"   r#   r|     sL   


	



z+_HasEventsDispatch._create_dispatcher_classNrG   rt   r   r   r   r   r   r   r`   ra   r   r   r   r   r   r   r   r   r   rc   )r   rC   r   r   r   r(   )r   r   r   r   r   r   r   rc   )r0   r1   r2   rJ   typingTYPE_CHECKINGrB   r   classmethodr   re   staticmethodr   r|   r"   r"   r"   r#   ry      s(   
 

ry   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.localrR   r&   r7   r   rR   r5   r&   c                 C  s   || _ || _| j j| _d S r:   r   )r-   r   rR   r"   r"   r#   r[   Z  s   z_JoinedDispatcher.__init__r   r   c                 C  s   | j | j| jffS r:   )rh   r   rR   rD   r"   r"   r#   rl   a  s   z_JoinedDispatcher.__reduce__r   r   _JoinedListener[_ET]c                 C  s.   t | j|}t| j|j|}t| |j| |S r:   )r^   r   r   rR   r   r\   )r-   r   rV   Zjlr"   r"   r#   rB   d  s   z_JoinedDispatcher.__getattr__r`   ra   rb   rc   c                 K  rd   r:   )rR   re   rf   r"   r"   r#   re   l  rg   z_JoinedDispatcher._listenrC   c                 C  s   | j jS r:   )rR   rE   rD   r"   r"   r#   rE   o  s   z_JoinedDispatcher._eventsN)r   r7   rR   r7   )r   r   )r   r   r   r   rs   rH   )r0   r1   r2   r3   rI   rJ   r[   rl   rB   re   rK   rE   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:   )rn   r    )rU   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 )Nr8   )r   r    rR   rn   r   )r   rR   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    rh   r   r   )r.   r   r   r   r   r"   r   r#   r   w  s   
	

zEvents._accept_withFr   r`   ra   r   r   r   r   r   rc   c                C  s   |j ||||d d S )Nr   )base_listenr   r"   r"   r#   re     s   

zEvents._listenc                 C  s   |   d S r:   )rw   )r.   r`   r"   r"   r#   _remove  s   zEvents._removec                 C  s   | j   d S r:   )r    rr   r~   r"   r"   r#   rr     s   zEvents._clearNr   r   )r`   ra   r   rc   rt   )	r0   r1   r2   r3   r   r   re   r   rr   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   zDescriptor 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   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    rj   r*   r,   	TypeError)r-   r   r.   dispZaer"   r"   r#   r     s    N)r   rC   )r   r   r.   r   r   r   )r   r   r.   r   r   r7   r   r   r.   r   r   r   )r0   r1   r2   r3   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   rj   )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.   rC   r   rc   ),r3   
__future__r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   ru   attrr   r   r   r   registryr   r    r   util.typingr   defaultdictlistr   rJ   r$   r%   r4   rL   rx   ry   r   r   r   r   r"   r"   r"   r#   <module>   sJ   




~p#7#