B 4]@sdZddlmZddlZddlZddlZddlmZddlmZe e Z e e Z ddZ d d Zd d Zd dZddZGdddeZdS)aJProvides 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`. )absolute_importN)exc)utilcCsXtr |tkrdSt|}x8|D],}|tkr$t|}|||s$t|q$WdS)N)_collection_to_keypopvalues_key_to_collection)reflistener_to_keykey dispatch_regrL/opt/alt/python37/lib64/python3.7/site-packages/sqlalchemy/event/registry.py_collection_gced5s   rcCsH|j}t|}|j}t|j}||kr,dS|||<t|}|||<dS)NFT)_keyr r weakref _listen_fnr) event_keyownerr r owner_ref listen_refr rrr_stored_in_collectionCs rcCsT|j}t|}t|j}|j}||d|s6t|=|tkrPt|}||dS)N)rr rr rrr)rrr r rrr rrr_removed_from_collectionVs  rc Csz|sdS|j}|j}t|}t|}xP|D]H}t|}||}t|}||krb|||ksjtn|||<|||<q*WdS)N)r rrr AssertionError) ZnewownerZoldownerelementsZold_listener_to_keyZnew_listener_to_key listen_fnrr r rrr_stored_in_collection_multigs  rcCsX|sdS|j}t|}x<|D]4}t|}||}t|}||d|st|=qWdS)N)r rrr r)rrr rrr r rrr_clear}s   rc@seZdZdZdZdddZeddZdd Zd d Z d d Z ddZ ddZ dddZ eddZddZddZddZdS) _EventKeyz)Represent :func:`.listen` arguments. )target identifierfnfn_keyfn_wrapdispatch_targetNcCsP||_||_||_t|tjr6t|jt|jf|_ n t||_ ||_ ||_ dS)N) r r!r" isinstancetypes MethodTypeid__func____self__r#r$r%)selfr r!r"r%_fn_wraprrr__init__s  z_EventKey.__init__cCst|j|j|jfS)N)r)r r!r#)r,rrrrsz_EventKey._keycCs,||jkr|St|j|j|j|j|dSdS)N)r-)rrr r!r"r%)r,r$rrr with_wrappers z_EventKey.with_wrappercCs,||jkr|St|j|j|j||jdSdS)N)r-)r%rr r!r"r$)r,r%rrrwith_dispatch_targets z_EventKey.with_dispatch_targetc Os|dd}|dd}|j|j|j}}}t|j|}|||} || }t|jjj|j} t | drt| |r|t |jj ||n|jjj|f||dS)NonceFnamed_sa_warn)rr%r!rgetattrdispatchZ_adjust_fn_specr/Z_eventshasattrr3rZ only_oncelistenZ_listen) r,argskwr1r2r r!r"dispatch_collectionZ adjusted_fnZ stub_functionrrrr7s        z_EventKey.listencCsx|j}|tkr(td|j|j|jft|}x@|D]4\}}|}|}|dk r<|dk r<| | |qr2Zretvalr r!r:rrr base_listens    z_EventKey.base_listencCs |jp |jS)N)r$r")r,rrrrsz_EventKey._listen_fncCs"t||r||jdSdSdS)NTF)rr?r)r,rlist_rrrappend_to_lists  z_EventKey.append_to_listcCst||||jdS)N)rr<r)r,rrArrrremove_from_lists z_EventKey.remove_from_listcCs"t||r||jdSdSdS)NTF)r appendleftr)r,rrArrrprepend_to_lists  z_EventKey.prepend_to_list)N)FFFN)__name__ __module__ __qualname____doc__ __slots__r.propertyrr/r0r7r<r=r@rrBrCrErrrrrs     r)rIZ __future__r collectionsr'rrr defaultdictdictr rrrrrrobjectrrrrrs