L i;8UdZddlmZddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd lm Z dd lm Z dd lm Z ddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZej<eZ de!d<d/dZ"GddZ#Gd d!eeZ$Gd"d#e$eZ%d0d$Z&Gd%d&eeZ'Gd'd(e$eZ(Gd)d*e'eZ)Gd+d,eeZ*Gd-d.e*eZ+y)1aBase 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]]]] _registrarscZ|jd xr|dk7xs|jdS)N_dispatch _sa_event) startswith)names [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/event/base.py_is_event_namer#2s3 OOC  7TZ%7 &  %&ceZdZdZddZy)_UnpickleDispatchzSerializable callable that re-generates an instance of :class:`_Dispatch` given a particular :class:`.Events` subclass. c|jD]D}d|jvstd|jdjj |cSt d)Nr_Dispatch[_ET]z*No class with a 'dispatch' member present.)__mro____dict__rr _for_classAttributeError)self _instance_clsclss r"__call__z_UnpickleDispatch.__call__Bs^ (( OCS\\)$cll:&>&G&G*]+, O !!MN Nr$N)r. Type[_ET]returnr()__name__ __module__ __qualname____doc__r0r$r"r&r&<s  Or$r&c>eZdZUdZded<ddZd dZed dZy) _DispatchCommonr7Optional[Type[_ET]]r.ctNNotImplementedErrorr-others r"_joinz_DispatchCommon._joinQ !##r$ctr<r=r-r!s r" __getattr__z_DispatchCommon.__getattr__TrBr$ctr<r=r-s r"_eventsz_DispatchCommon._eventsWs !##r$Nr@_DispatchCommon[_ET]r2_JoinedDispatcher[_ET]r!strr2z_InstanceLevelDispatch[_ET]r2Type[_HasEventsDispatch[_ET]]) r3r4r5 __slots____annotations__rArEpropertyrHr7r$r"r9r9Ls+I&&$$$$r$r9ceZdZUdZdZded<ejZded<ded<d ed <d ed <d ed<ded< d ddZ ddZ e ddZ d dZ d!dZd"dZd#dZd$dZ d% d&dZd'dZy)( _DispatchaMMirror 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_listenersbool_active_historyz9MutableMapping[Type[_ET], Dict[str, _EmptyListener[_ET]]]_empty_listener_regzDict[str, _EmptyListener[_ET]]rVz List[str] _event_namesr:r.zType[_JoinedDispatcher[_ET]]_joined_dispatch_clsrOrHNc ||_||_|r|J |j||_yi|_y#t$rL|j Dcic]}|j t||ncc}wc}x|_|j|<YywxYwr<)rUr.rYrVKeyError_event_descriptorsr!r)r-parent instance_clslss r"__init__z_Dispatch.__init__s  ) % %% (,(@(@(N%%'D !  %77GG^B ==%(@(@ ) s3B A)(BBc |j|}t||j||S#t$r t |wxYwr<)rVsetattrr!r]r,)r-r!ras r"rEz_Dispatch.__getattr__sJ &&t,B D"''2 &I  ' & & 's*?c#JK|jD]}t||ywr<)rZgetattr)r-ks r"r^z_Dispatch._event_descriptorss*"" #A$" " #s!#c <|jj|fi|Sr<)rH_listenr- event_keykws r"riz_Dispatch._listens#t||##I444r$c&|j||Sr<) __class__)r-r`s r"r+z_Dispatch._for_classs~~dL11r$c<|j}|j|Sr<)rnr+)r-instancer`s r" _for_instancez_Dispatch._for_instances)) |,,r$cZd|jjvsJ|j||S)zCreate a 'join' of this :class:`._Dispatch` and another. This new dispatcher will dispatch events to both :class:`._Dispatch` objects. r[)rnr*r[r?s r"rAz_Dispatch._joins/&)@)@@@@((u55r$c0t|jffSr<)r&r.rGs r" __reduce__z_Dispatch.__reduce__s "T%7%7$999r$c|jD]I}t|trt||jj |j ||Ky)zIPopulate from the listeners in another :class:`_Dispatch` object.)only_propagateN)r^ isinstancerrfr! for_modify_update)r-r@rvras r"ryz_Dispatch._updatesT ** B"n- D"'' " - -d 3 ; ;> <  r$cd|jD]!}|j|j#yr<)r^rxclear)r-ras r"_clearz_Dispatch._clears,)) (B MM$  % % ' (r$r<)r_zOptional[_Dispatch[_ET]]r`r:rL)r2z Iterator[_ClsLevelDispatch[_ET]]rk_EventKey[_ET]rlrr2None)r`r1r2r()rprr2r(rI)r2zUnion[str, Tuple[Any, ...]])T)r@r(rvrWr2rr2r)r3r4r5r6rPrQweakrefWeakKeyDictionaryrYrbrErRr^rir+rqrArtryr|r7r$r"rTrT\s*KI "!!#$54&&66 **-1'('*', ## 52- 6:=A # 59   (r$rTc|jjD]+}t|j|t|r%t|=-yr<)rrZrremove)r/rgs r"_remove_dispatcherrs; \\ & &Ac"1~Ar$ceZdZUded< ded< ej rddZddZe ddZ eddddd  dd Z e dd Z e dd Z y )_HasEventsDispatchr:_dispatch_targetr(rcyr<r7rDs r"rEz_HasEventsDispatch.__getattr__sr$cf|j|j|j|jy)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$ctr<r=)r/target identifiers r" _accept_withz_HasEventsDispatch._accept_withs "##r$F propagateinsertnamedasyncioctr<r=r/rkrrrrs r"riz_HasEventsDispatch._listens "##r$cB|d|_||_|jSr<)rrH)klass dispatch_clss r" _set_dispatchz _HasEventsDispatch._set_dispatchs"&d+$ ~~r$c t|dr|jj}nt}|Dcgc]}t |s|}}t dt d|z|fd|i}||_|j||}|jD]4}t||t|||t|j|6|jD]}} t| ts| tus| jjj D]>} t|| j"| |jj| j"@t%|ddrK|j&} | Jt| drd| j(vrt+|| _nt-|| _t d|j.zt0fd|i} | |_| t5| j.<ycc}w) zVCreate a :class:`._Dispatch` class corresponding to an :class:`.Events` class.rType[_Dispatch[_ET]]z %sDispatchrPrN_slots_dispatchzJoined%s)hasattrrrnrTr#rtyperZrrdrrappendr issubclassrHr^r!rfrrPslots_dispatcher dispatcherr3_JoinedDispatcherr[globals) r/ classnamebasesdict_ dispatch_baserg event_namesr dispatch_instsuper_radispatch_target_clsrs r"rz+_HasEventsDispatch._create_dispatcher_classs 3 #LL22M%M"'=Q>!+F&),y1H ..11DD>BM277B7 --44RWW=> > 3*D 1"%"6"6 &2 22+[9%)<)F)FF/?/D#,/9##, .. .  + &  -2 )%* %..!S>s G"G"NrLrrzUnion[_ET, Type[_ET]]rrMr2zOptional[Union[_ET, Type[_ET]]] rkr~rrWrrWrrWrrWr2r)rrOrrr2r()rrMrzTuple[type, ...]rzMapping[str, Any]r2r)r3r4r5rQtyping TYPE_CHECKINGrEr classmethodrri staticmethodrrr7r$r"rrs)); LP $*$8;$ ($$    $! $ $  $  $ $  $ $ , *    7*7*$47*=N7* 7*7*r$rcneZdZUdZdZded<ded<ded< ddZdd Zdd Zdd Z e dd Z y )rz5Represent a connection between two _Dispatch objects.localr_r.rJrr_r:r.cV||_||_|jj|_yr<r)r-rr_s r"rbz_JoinedDispatcher.__init__Zs$  !ZZ55r$cJ|j|j|jffSr<)rnrr_rGs r"rtz_JoinedDispatcher.__reduce__asT[[ 9::r$ct|j|}t|j|j|}t ||j||Sr<)rfrrr_r!rd)r-r!rajls r"rEz_JoinedDispatcher.__getattr__ds?TZZ & T[["''2 6bggr" r$c <|jj|fi|Sr<)r_rirjs r"riz_JoinedDispatcher._listenls"t{{""9333r$c.|jjSr<)r_rHrGs r"rHz_JoinedDispatcher._eventsos{{"""r$N)rrJr_rJ)r2r)r!rMr2z_JoinedListener[_ET]r}rN) r3r4r5r6rPrQrbrtrErirRrHr7r$r"rrQsT?2I   &&6)63G6;4##r$rceZdZdZe d dZeddddd d dZed dZed dZy) Eventsz>Define event listening functions for a particular target type.cdfd }dfd }tdrg||jjsI|t|jjs(|tr||jjrSy)Nc,tfd|DS)Nc3JK|]}tj|ywr<)rwr).0trs r" z;Events._accept_with..dispatch_is..|sE!z&//15Es #)all)typesrs r" dispatch_isz(Events._accept_with..dispatch_is{sEuEE Er$ctdjj}t|tr'td|j}t|tr't||S)NrK)rrr_rwr)rr_rs r"dispatch_parent_isz/Events._accept_with..dispatch_parent_is~sT2FOODKKFV%676?FFV%67fa( (r$r)r Type[Any]r2rW)rrr2rW)rrrnrr)r/rrrrs ` r"rzEvents._accept_withwse F ) 6: &CLL223tS\\%;%;< 12*3<<+A+AB r$Frc.|j||||y)Nr) base_listenrs r"rizEvents._listens  eW  r$c$|jyr<)r)r/rks r"_removezEvents._removesr$c8|jjyr<)rr|rs r"r|z Events._clears r$Nrr)rkr~r2rr) r3r4r5r6rrrirr|r7r$r"rrtsH*8; (8    !               r$rcPeZdZdZddZe ddZed dZd dZy) rzDescriptor used by target classes to deliver the _Dispatch class at the class level and produce new _Dispatch instances for target instances. c4|j|_||_yr<)revents)r-rs r"rbzdispatcher.__init__s  r$cyr<r7r-objr/s r"__get__zdispatcher.__get__s #r$cyr<r7rs r"rzdispatcher.__get__sILr$c| |jS|jj|} ||jd<|S#t$r}t d|d|d}~wwxYw)Nrztarget z> doesn't have __dict__, should it be defining _slots_dispatch?)rrqr*r, TypeError)r-rr/dispaes r"rzdispatcher.__get__sk ;== }}**3/ '+CLL $   /25  s< AAAN)rrO)rz Literal[None]r/rr2r)rrr/rr2rJrrr/rr2r)r3r4r5r6rbr rr7r$r"rrsM# #'0# ##LL r$rceZdZddZy)rc| |jSt|dr |jS|jj|}||_|S)Nr)rrrrq)r-rr/rs r"rzslots_dispatcher.__get__sI ;== 3) *&& &}}**3/" r$Nr)r3r4r5rr7r$r"rrs r$r)r!rMr2rW)r/rOr2r),r6 __future__rrrrrrrr r r r r rrrrattrrrrrregistryrrr util.typingr defaultdictlistrrQr#r&r9rTrrrrrrr7r$r"rs # !# (!!DT E & O O $gcl $ {(${(|m*m*` #, #F4  $4n  F z# r$