zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
U
¸ý°dñ+ã@sÞUdZddlmZddlZddlZddlZddlmZddlmZddlmZddlm    Z    ddlm
Z
dd    lm Z dd
lm Z dd lm Z dd lmZdd lmZddlmZddlZddlmZddlmZejrìddlmZddlmZedefZeeeeeffZeeeefZedddZGdd„dƒZ e
dZ!e "e#¡Z$de%d<e
defZ&e "e#¡Z'de%d<d d!d"œd#d$„Z(d%d&d'd(œd)d*„Z)d%d&d!d(œd+d,„Z*d&d&d-d!d.œd/d0„Z+d&d-d!d1œd2d3„Z,Gd4d5„d5e eƒZ-dS)6aJProvides managed registration services on behalf of :func:`.listen`
arguments.
 
By "managed registration", we mean that event listening functions and
other objects can be added to various collections in such a way that their
membership in all those collections can be revoked at once, based on
an equivalent :class:`._EventKey`.
 
é)Ú annotationsN)ÚAny)ÚCallable)Úcast)ÚDeque)ÚDict)ÚGeneric)ÚIterable)ÚOptional)ÚTuple)ÚTypeVar)ÚUnioné)Úexc)Úutilé)Ú RefCollection)Ú
dispatcher.Ú_ETÚ EventTarget)Úboundc@seZdZUdZdZded<dS)rzírepresents an event target, that is, something we can listen on
    either with that target as a class or as an instance.
 
    Examples include:  Connection, Mapper, Table, Session,
    InstrumentedAttribute, Engine, Pool, Dialect.
 
    ©zdispatcher[Any]ÚdispatchN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Ú    __slots__Ú__annotations__rrrúPd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/event/registry.pyr2s
)zweakref.ref[RefCollection[Any]]úweakref.ref[_ListenerFnType]z6Dict[_EventKeyTupleType, _RefCollectionToListenerType]Ú_key_to_collectionr z>Dict[weakref.ref[RefCollection[Any]], _ListenerToEventKeyType]Ú_collection_to_keyzweakref.ref[Any]ÚNone)ÚrefÚreturncCs^tr |tkrdStd|ƒ}t |¡}| ¡D],}|tkr,t|}| |¡|s,t |¡q,dS)Nz'weakref.ref[RefCollection[EventTarget]])r"rÚpopÚvaluesr!)r$Úlistener_to_keyÚkeyÚ dispatch_regrrrÚ_collection_gcedgs 
 
 
r+ú_EventKey[_ET]úRefCollection[_ET]Úbool)Ú    event_keyÚownerr%cCsH|j}t|}|j}t |j¡}||kr,dS|||<t|}|||<dS)NFT)Ú_keyr!r$ÚweakrefÚ
_listen_fnr")r/r0r)r*Ú    owner_refÚ
listen_refr(rrrÚ_stored_in_collectionxs r6cCsT|j}t|}t |j¡}|j}| |d¡|s6t|=|tkrPt|}| |¡dS©N)r1r!r2r$r3r&r")r/r0r)r*r5r4r(rrrÚ_removed_from_collections  r8zIterable[_ListenerFnType])ÚnewownerÚoldownerÚelementsr%c     Cs²|sdS|j}|j}t|}t|}|D]„}t |¡}z ||}    Wntk
rZYq(YnXz t|    }
Wntk
r€Yq(YnX||
krœ|
||ks¤t‚n||
|<|    ||<q(dSr7)r$r"r2ÚKeyErrorr!ÚAssertionError) r9r:r;Z oldowner_refZ newowner_refZold_listener_to_keyZnew_listener_to_keyÚ    listen_fnr5r)r*rrrÚ_stored_in_collection_multi s(
 
 
r?)r0r;r%cCsT|sdS|j}t|}|D]4}t |¡}||}t|}| |d¡|st|=qdSr7)r$r"r2r!r&)r0r;r4r(r>r5r)r*rrrÚ_clearÄs
 r@c@s eZdZUdZdZded<ded<ded<d    ed
<d ed <d ed<d7dddd d dœdd„Zeddœdd„ƒZdddœdd„Z    d ddœdd„Z
d d ddœd d!„Z ddœd"d#„Z d$dœd%d&„Z d8d$d$d$d(d$dd)œd*d+„Zeddœd,d-„ƒZd.d/d$d0œd1d2„Zd.d/dd0œd3d4„Zd.d/d$d0œd5d6„ZdS)9Ú    _EventKeyz$Represent :func:`.listen` arguments.)ÚtargetÚ
identifierÚfnÚfn_keyÚfn_wrapÚdispatch_targetrrBÚstrrCÚ_ListenerFnTyperDÚ_ListenerFnKeyTyperErrGzOptional[_ListenerFnType]Ú_fn_wrapN)rBrCrDrGrKcCsP||_||_||_t|tjƒr6t|jƒt|jƒf|_    n
t|ƒ|_    ||_
||_ dSr7) rBrCrDÚ
isinstanceÚtypesÚ
MethodTypeÚidÚ__func__Ú__self__rErFrG)ÚselfrBrCrDrGrKrrrÚ__init__ês 
z_EventKey.__init__Ú_EventKeyTupleType)r%cCst|jƒ|j|jfSr7)rOrBrCrE©rRrrrr1üsz_EventKey._keyr,)rFr%cCs,||jkr|St|j|j|j|j|dSdS©N)rK)r3rArBrCrDrG)rRrFrrrÚ with_wrappers
ûz_EventKey.with_wrapper)rGr%cCs,||jkr|St|j|j|j||jdSdSrV)rGrArBrCrDrF)rRrGrrrÚwith_dispatch_target s
ûz_EventKey.with_dispatch_targetr#)ÚargsÚkwr%c OsÂ| dd¡}| dd¡}| dd¡}|j|j|j}}}t|j|ƒ}    |     ||¡}
| |
¡}t|jjj|jƒ} t    | dƒr€|  
¡|sˆ|r¨| t j |j|d¡j ||Žn|jjj|f|ž|ŽdS)NÚonceFZ_once_unless_exceptionÚnamedÚ_sa_warn)Úretry_on_exception)r&rGrCr3ÚgetattrrZ_adjust_fn_specrWZ_eventsÚhasattrr]rZ    only_onceÚlistenZ_listen) rRrYrZr[Zonce_unless_exceptionr\rBrCrDÚdispatch_collectionZ adjusted_fnZ stub_functionrrrras6   ý
 
ÿ
ÿÿüz_EventKey.listencCst|j}|tkr(t d|j|j|jf¡‚t |¡}| ¡D]4\}}|ƒ}|ƒ}|dk    r:|dk    r:|     | 
|¡¡q:dS)Nz*No listeners found for event %s / %r / %s ) r1r!rZInvalidRequestErrorrBrCrDr&ÚitemsÚremoverW)rRr)r*Zcollection_refZ listener_refZ
collectionZ listener_fnrrrrd8sÿÿ
z_EventKey.remover.cCs
|jtkS)z6Return True if this event key is registered to listen.)r1r!rUrrrÚcontainsIsz_EventKey.containsFzOptional[bool])Ú    propagateÚinsertr\ÚretvalÚasyncior%c
CsT|j|j}}t|j|ƒ}| |j¡}    |r2|     ¡|rD|     ||¡n |     ||¡dSr7)rGrCr_rÚ
for_modifyZ _set_asynciorgÚappend)
rRrfrgr\rhrirBrCrbrjrrrÚ base_listenMs      z_EventKey.base_listencCs |jp
|jSr7)rFrDrUrrrr3csz_EventKey._listen_fnr-zDeque[_ListenerFnType])r0Úlist_r%cCs"t||ƒr| |j¡dSdSdS©NTF)r6rkr3©rRr0rmrrrÚappend_to_listgs
 z_EventKey.append_to_listcCst||ƒ| |j¡dSr7)r8rdr3rorrrÚremove_from_listrs
z_EventKey.remove_from_listcCs"t||ƒr| |j¡dSdSdSrn)r6Ú
appendleftr3rorrrÚprepend_to_listzs
 z_EventKey.prepend_to_list)N)FFFNF)rrrrrrrSÚpropertyr1rWrXrardrerlr3rprqrsrrrrrA×s8
    ú   ú rA).rÚ
__future__rÚ collectionsrMÚtypingrrrrrrr    r
r r r r2ÚrrÚ TYPE_CHECKINGÚattrrÚbaserrIÚintrJrHrTrrZ_RefCollectionToListenerTypeÚ defaultdictÚdictr!rZ_ListenerToEventKeyTyper"r+r6r8r?r@rArrrrÚ<module>sX                      ÿþ
ÿÿý
$