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 Csj|sdS|j}|j}t|}t|}x@|D]8}t|}||}t|}||krRn|||<|||<q*WdS)N)r rrr ) 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) rr r! isinstancetypes MethodTypeid__func____self__r"r#r$)selfrr r!r$_fn_wraprrr__init__s  z_EventKey.__init__cCst|j|j|jfS)N)r(rr r")r+rrrrsz_EventKey._keycCs,||jkr|St|j|j|j|j|dSdS)N)r,)rrrr r!r$)r+r#rrr with_wrappers z_EventKey.with_wrappercCs,||jkr|St|j|j|j||jdSdS)N)r,)r$rrr 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_eventshasattrr2rZ only_oncelistenZ_listen) r+argskwr0r1rr r!dispatch_collectionZ adjusted_fnZ stub_functionrrrr6s        z_EventKey.listencCsx|j}|tkr(td|j|j|jft|}x@|D]4\}}|}|}|dk r<|dk r<| | |qr)r+rlist_rrrappend_to_lists  z_EventKey.append_to_listcCst||||jdS)N)rr;r)r+rr@rrrremove_from_lists z_EventKey.remove_from_listcCs"t||r||jdSdSdS)NTF)r appendleftr)r+rr@rrrprepend_to_lists  z_EventKey.prepend_to_list)N)FFFN)__name__ __module__ __qualname____doc__ __slots__r-propertyrr.r/r6r;r<r?rrArBrDrrrrrs     r)rHZ __future__r collectionsr&rrr defaultdictdictr rrrrrrobjectrrrrrs