
    )fj:                    8   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j<                  e      Z de!d<   d/dZ" G d d      Z# G d  d!ee         Z$ G d" d#e$e         Z%d0d$Z& G d% d&ee         Z' G d' d(e'e         Z( G d) d*e$e         Z) G d+ d,ee         Z* G d- d.e*e         Z+y)1a  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]]]]_registrarsc                Z    | j                  d       xr | dk7  xs | j                  d      S )N_dispatch	_sa_event)
startswith)names    R/var/www/html/flask-app/venv/lib/python3.12/site-packages/sqlalchemy/event/base.py_is_event_namer#   2   s3     OOC  7TZ%7&		%&    c                      e Zd ZdZddZy)_UnpickleDispatchzSerializable callable that re-generates an instance of
    :class:`_Dispatch` given a particular :class:`.Events` subclass.

    c                    |j                   D ]D  }d|j                  v st        d|j                  d   j                        j	                  |      c S  t        d      )Nr   _Dispatch[_ET]z*No class with a 'dispatch' member present.)__mro____dict__r   r   
_for_classAttributeError)self_instance_clsclss      r"   __call__z_UnpickleDispatch.__call__B   s^     (( 	OCS\\)$cll:&>&G&G*]+,	O !!MNNr$   N)r.   	Type[_ET]returnr(   )__name__
__module____qualname____doc__r0    r$   r"   r&   r&   <   s    
Or$   r&   c                  >    e Zd ZU dZded<   ddZd	dZed
d       Zy)_DispatchCommonr7   Optional[Type[_ET]]r.   c                    t               NNotImplementedError)r-   others     r"   _joinz_DispatchCommon._joinQ       !##r$   c                    t               r<   r=   r-   r!   s     r"   __getattr__z_DispatchCommon.__getattr__T   rA   r$   c                    t               r<   r=   r-   s    r"   _eventsz_DispatchCommon._eventsW   s    !##r$   Nr?   _DispatchCommon[_ET]r2   _JoinedDispatcher[_ET]r!   strr2   z_InstanceLevelDispatch[_ET]r2   Type[_HasEventsDispatch[_ET]])	r3   r4   r5   	__slots____annotations__r@   rD   propertyrG   r7   r$   r"   r9   r9   L   s+    I&&$$ $ $r$   r9   c                      e Zd ZU dZdZded<    ej                         Zded<   ded<   d	ed
<   ded<   ded<   ded<   	 	 d	 	 	 ddZ	ddZ
edd       Zd dZd!dZd"dZd#dZd$dZ	 d%	 	 	 	 	 d&dZd'dZy)(	_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_listenersbool_active_historyz9MutableMapping[Type[_ET], Dict[str, _EmptyListener[_ET]]]_empty_listener_regzDict[str, _EmptyListener[_ET]]rU   z	List[str]_event_namesr:   r.   zType[_JoinedDispatcher[_ET]]_joined_dispatch_clsrN   rG   Nc           	        || _         || _        |r|J 	 | j                  |   | _        y i | _        y # t        $ rL |j
                  D ci c]  }|j                  t        ||       nc c}w c}x| _        | j                  |<   Y y w xY wr<   )rT   r.   rX   rU   KeyError_event_descriptorsr!   r   )r-   parentinstance_clslss       r"   __init__z_Dispatch.__init__   s    
 )%%(,(@(@(N% %'D!  
 %77 GG^B== %(@(@ )s   3 B
A)(BBc                    	 | j                   |   }t        | |j                  |       |S # t        $ r t	        |      w xY wr<   )rU   setattrr!   r\   r,   )r-   r!   r`   s      r"   rD   z_Dispatch.__getattr__   sJ    	&&t,B D"''2&I	  	' &&	's   * ?c              #  J   K   | j                   D ]  }t        | |        y wr<   )rY   getattr)r-   ks     r"   r]   z_Dispatch._event_descriptors   s*     "" 	#A $""	#s   !#c                <     | j                   j                  |fi |S r<   )rG   _listenr-   	event_keykws      r"   rh   z_Dispatch._listen   s    #t||##I444r$   c                &    | j                  | |      S r<   )	__class__)r-   r_   s     r"   r+   z_Dispatch._for_class   s    ~~dL11r$   c                <    |j                   }| j                  |      S r<   )rm   r+   )r-   instancer_   s      r"   _for_instancez_Dispatch._for_instance   s    ))|,,r$   c                    d| j                   j                  vrFt        d| j                   j                  z  t        fd| j
                  i      }|| j                   _        | j                  | |      S )zCreate a 'join' of this :class:`._Dispatch` and another.

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

        rZ   zJoined%srO   )rm   r*   typer3   _JoinedDispatcherrY   rZ   )r-   r?   r/   s      r"   r@   z_Dispatch._join   sg     ")@)@@T^^444"$d//0C
 36DNN/((u55r$   c                0    t               | j                  ffS r<   )r&   r.   rF   s    r"   
__reduce__z_Dispatch.__reduce__   s     "T%7%7$999r$   c                    |j                   D ]I  }t        |t              rt        | |j                        j                  |       j                  ||       K y)zIPopulate from the listeners in another :class:`_Dispatch`
        object.)only_propagateN)r]   
isinstancer   re   r!   
for_modify_update)r-   r?   rw   r`   s       r"   rz   z_Dispatch._update   sT    
 ** 	B"n-D"''"--d3;;> < 	r$   c                d    | j                   D ]!  }|j                  |       j                          # y r<   )r]   ry   clear)r-   r`   s     r"   _clearz_Dispatch._clear   s,    )) 	(BMM$%%'	(r$   r<   )r^   zOptional[_Dispatch[_ET]]r_   r:   rK   )r2   z Iterator[_ClsLevelDispatch[_ET]]rj   _EventKey[_ET]rk   r   r2   None)r_   r1   r2   r(   )ro   r   r2   r(   rH   )r2   zUnion[str, Tuple[Any, ...]])T)r?   r(   rw   rV   r2   r   r2   r   )r3   r4   r5   r6   rO   rP   weakrefWeakKeyDictionaryrX   ra   rD   rQ   r]   rh   r+   rp   r@   ru   rz   r}   r7   r$   r"   rS   rS   \   s    * KI 	"!!#   $ 54&&66** -1'(' *',	 # #52-6 : =A
#
59
	
(r$   rS   c                    | j                   j                  D ]+  }t        |   j                  |        t        |   r%t        |= - y r<   )r   rY   r   remove)r/   rf   s     r"   _remove_dispatcherr      s;    \\&& Ac"1~Ar$   c                      e Zd ZU ded<   	 ded<   	 ej
                  rddZddZe	 	 	 	 	 	 dd       Z	eddddd		 	 	 	 	 	 	 	 	 	 	 dd
       Z
e	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Zy)_HasEventsDispatchr:   _dispatch_targetr(   r   c                     y r<   r7   rC   s     r"   rD   z_HasEventsDispatch.__getattr__   s    r$   c                f    | j                  | j                  | j                  | j                         y)zOIntercept new Event subclasses and create associated _Dispatch
        classes.N)_create_dispatcher_classr3   	__bases__r*   r/   s    r"   __init_subclass__z$_HasEventsDispatch.__init_subclass__   s"     	$$S\\3==#,,Or$   c                    t               r<   r=   )r/   target
identifiers      r"   _accept_withz_HasEventsDispatch._accept_with   s     "##r$   F	propagateinsertnamedasyncioc                   t               r<   r=   r/   rj   r   r   r   r   s         r"   rh   z_HasEventsDispatch._listen  s     "##r$   c                B     |d       | _         | |_        | j                   S r<   )r   rG   )klassdispatch_clss     r"   _set_dispatchz _HasEventsDispatch._set_dispatch  s"     &d+$~~r$   c           
     R   t        | d      r| j                  j                  }nt        }|D cg c]  }t	        |      s| }}t        dt        d|z  |fd|i            }||_        | j                  | |      }|j                  D ]4  }t        ||t        | ||                t        |   j                  |        6 |j                  D ]}  }	t        |	t              s|	t        us|	j                  j                  j                   D ]>  }
t        ||
j"                  |
       |j                  j                  |
j"                         @  t%        | dd      rL| j&                  }|J t        |d      rd|j(                  v rt+        |       |_        yt-        |       |_        yyc c}w )zVCreate a :class:`._Dispatch` class corresponding to an
        :class:`.Events` class.r   Type[_Dispatch[_ET]]z
%sDispatchrO   r   N_slots_dispatch)hasattrr   rm   rS   r#   r   rr   rY   r   rc   r   r   appendr   
issubclassrG   r]   r!   re   r   rO   slots_dispatcher
dispatcher)r/   	classnamebasesdict_dispatch_baserf   event_namesr   dispatch_instsuper_r`   dispatch_target_clss               r"   r   z+_HasEventsDispatch._create_dispatcher_class  s    3
#LL22M%M"'=Q>!+<q=="y( k*
 %0!))#|<** 	'AM1&7U1X&FGN!!#&	' #,, 	>F&),y1H ..11DD >BM277B7 --44RWW=>	> 3*D1"%"6"6&22+[9%)<)F)FF/?/D#,/9##, 2- >s
   F$F$NrK   r   r   zUnion[_ET, Type[_ET]]r   rL   r2   zOptional[Union[_ET, Type[_ET]]]rj   r   r   rV   r   rV   r   rV   r   rV   r2   r   )r   rN   r   r   r2   r(   )r   rL   r   zTuple[type, ...]r   zMapping[str, Any]r2   r   )r3   r4   r5   rP   typingTYPE_CHECKINGrD   r   classmethodr   rh   staticmethodr   r   r7   r$   r"   r   r      s   )); LP $*$8;$	($ $
 
  	$!	$ 		$
 	$ 	$ 	$ 
	$ 	$ ,* 
  -?-?$4-?=N-?	-? -?r$   r   c                      e Zd ZdZe	 	 	 	 	 	 d	d       Zeddddd	 	 	 	 	 	 	 	 	 	 	 d
d       Zedd       Zedd       Zy)Eventsz>Define event listening functions for a particular target type.c                   dfd}dfd}t        d      rg || j                  j                        sI |t        | j                  j                        s( |t              r || j                  j                        rS y )Nc                 ,    t        fd| D              S )Nc              3  J   K   | ]  }t        j                  |        y wr<   )rx   r   ).0tr   s     r"   	<genexpr>z;Events._accept_with.<locals>.dispatch_is.<locals>.<genexpr>T  s     E!z&//15Es    #)all)typesr   s    r"   dispatch_isz(Events._accept_with.<locals>.dispatch_isS  s    EuEEEr$   c                X    t        t        dj                        j                  |       S )NrJ   )rx   r   r   r^   )r   r   s    r"   dispatch_parent_isz/Events._accept_with.<locals>.dispatch_parent_isV  s'    -v?FF r$   r   )r   	Type[Any]r2   rV   )r   r   r2   rV   )r   r   rm   rr   rs   )r/   r   r   r   r   s    `   r"   r   zEvents._accept_withO  se    	F	 6:&CLL223tS\\%;%;< 12*3<<+A+AB r$   Fr   c               .    |j                  ||||       y )Nr   )base_listenr   s         r"   rh   zEvents._listenj  s      	eW 	 	
r$   c                $    |j                          y r<   )r   )r/   rj   s     r"   _removezEvents._removex  s    r$   c                8    | j                   j                          y r<   )r   r}   r   s    r"   r}   zEvents._clear|  s    r$   Nr   r   )rj   r   r2   r   r   )	r3   r4   r5   r6   r   r   rh   r   r}   r7   r$   r"   r   r   L  s    H*8;	( 4 
  
!
 	

 
 
 
 

 
    r$   r   c                  f    e Zd ZU dZdZded<   ded<   ded<   	 	 	 	 ddZdd	Zdd
Ze	dd       Z
y)rs   z5Represent a connection between two _Dispatch objects.localr^   r.   rI   r   r^   r:   r.   c                V    || _         || _        | j                   j                  | _        y r<   r   )r-   r   r^   s      r"   ra   z_JoinedDispatcher.__init__  s$     
!ZZ55r$   c                    t        | j                  |      }t        | j                  |j                  |      }t        | |j                  |       |S r<   )re   r   r   r^   r!   rc   )r-   r!   r`   jls       r"   rD   z_JoinedDispatcher.__getattr__  s?     TZZ&T[["''26bggr"	r$   c                <     | j                   j                  |fi |S r<   )r^   rh   ri   s      r"   rh   z_JoinedDispatcher._listen  s    "t{{""9333r$   c                .    | j                   j                  S r<   )r^   rG   rF   s    r"   rG   z_JoinedDispatcher._events  s    {{"""r$   N)r   rI   r^   rI   )r!   rL   r2   z_JoinedListener[_ET]r~   rM   )r3   r4   r5   r6   rO   rP   ra   rD   rh   rQ   rG   r7   r$   r"   rs   rs     sO    ?2I  &&6)63G64 # #r$   rs   c                  P    e Zd ZdZddZe	 	 	 	 	 	 dd       Zed	d       Zd
dZy)r   zDescriptor used by target classes to
    deliver the _Dispatch class at the class level
    and produce new _Dispatch instances for target
    instances.

    c                4    |j                   | _         || _        y r<   )r   events)r-   r   s     r"   ra   zdispatcher.__init__  s    r$   c                     y r<   r7   r-   objr/   s      r"   __get__zdispatcher.__get__  s      #r$   c                     y r<   r7   r   s      r"   r   zdispatcher.__get__  s    ILr$   c                    || j                   S | j                   j                  |      }	 ||j                  d<   |S # t        $ r}t	        d|d      |d }~ww xY w)Nr   ztarget z> doesn't have __dict__, should it be defining _slots_dispatch?)r   rp   r*   r,   	TypeError)r-   r   r/   dispaes        r"   r   zdispatcher.__get__  sk    ;== }}**3/	'+CLL$   	/25 	s   < 	AAAN)r   rN   )r   zLiteral[None]r/   r   r2   r   )r   r   r/   r   r2   rI   r   r   r/   r   r2   r   )r3   r4   r5   r6   ra   r   r   r7   r$   r"   r   r     sM     # #'0#	# # L Lr$   r   c                      e Zd ZddZy)r   c                    || j                   S t        |d      r|j                  S | j                   j                  |      }||_        |S )Nr   )r   r   r   rp   )r-   r   r/   r   s       r"   r   zslots_dispatcher.__get__  sI    ;== 3)*&&&}}**3/"r$   Nr   )r3   r4   r5   r   r7   r$   r"   r   r     s    	r$   r   )r!   rL   r2   rV   )r/   rN   r2   r   ),r6   
__future__r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   attrr   r   r   r   registryr   r    r   util.typingr   defaultdictlistr   rP   r#   r&   r9   rS   r   r   r   rs   r   r   r7   r$   r"   <module>r      s  	 #         !       #   ( !    ! DT E 
&O O $gcl $ @($ @(Fc? c?L2$ 2j#, #@   F
z# 
r$   