ef$ dZddlZddlZddlZddlZ en#e$rdZYnwxYwejdkr!ejdZ ejdZ n ejdZ ejdZ d d Z Gd d e Z dS) z-Refactored 'safe reference from dispatcher.pyNc"t|dS)N__call__)hasattr)objects p/builddir/build/BUILD/imunify360-venv-2.3.5/opt/imunify360/venv/lib/python3.11/site-packages/blinker/_saferef.pycallabler.svz***)im_selfim_func__self____func__c> t|}|@t|dst|ds Jd|zt||}|SdS#t$r=t |rt j||cYSt j|cYSwxYw)aReturn a *safe* weak reference to a callable target. - ``target``: The object to be weakly referenced, if it's a bound method reference, will create a BoundMethodWeakref, otherwise creates a simple weakref. - ``on_delete``: If provided, will have a hard reference stored to the callable to be called after the safe reference goes out of scope with the reference object, (either a weakref or a BoundMethodWeakref) as argument. Nr rzRsafe_ref target %r has im_self, but no im_func, don't know how to create reference)target on_delete)get_selfrBoundMethodWeakrefAttributeErrorrweakrefref)rrr references rsafe_refr:s6""  69-- ?1L1L ? ?57=> ? ?L+&INNNI    ''' I   ';vy11 1 1 1;v&& & & & 'sA.BBBceZdZdZejZd fd Zd dZdZ e e Z dZ e Z dZ dZd ZxZS) ra'Safe' and reusable weak references to instance methods. BoundMethodWeakref objects provide a mechanism for referencing a bound method without requiring that the method object itself (which is normally a transient object) is kept alive. Instead, the BoundMethodWeakref object keeps weak references to both the object and the function which together define the instance method. Attributes: - ``key``: The identity key for the reference, calculated by the class's calculate_key method applied to the target instance method. - ``deletion_methods``: Sequence of callable objects taking single argument, a reference to this object which will be called when *either* the target object or target function is garbage collected (i.e. when this object becomes invalid). These are specified as the on_delete parameters of safe_ref calls. - ``weak_self``: Weak reference to the target object. - ``weak_func``: Weak reference to the target function. Class Attributes: - ``_all_instances``: Class attribute pointing to all live BoundMethodWeakref objects indexed by the class's calculate_key(target) method applied to the target objects. This weak value dictionary is used to short-circuit creation so that multiple references to the same (object, function) pair produce the same BoundMethodWeakref instance. Nc*||}|j|}||j||St t ||}||j|<|j||g|Ri||S)aCreate new instance or return current instance. Basically this method of construction allows us to short-circuit creation of references to already- referenced instance methods. The key corresponding to the target is calculated, and if there is already an existing reference, that is returned, with its deletion_methods attribute updated. Otherwise the new instance is created and registered in the table of already-referenced methods. ) calculate_key_all_instancesgetdeletion_methodsappendsuperr__new____init__) clsrr argumentsnamedkeycurrentbase __class__s rr!zBoundMethodWeakref.__new__|s''$((--    $ + +I 6 6 6N+S1199#>>D&*C s # DM&) Ai A A A5 A A AKr cR|fd}|g|_|||_t|}t |}t j|||_t j|||_t||_ t|j |_ dS)aReturn a weak-reference-like instance for a bound method. - ``target``: The instance-method target for the weak reference, must have im_self and im_func attributes and be reconstructable via the following, which is true of built-in instance methods:: target.im_func.__get__( target.im_self ) - ``on_delete``: Optional callback which will be called when this weak reference ceases to be valid (i.e. either the object or the function is garbage collected). Should take a single argument, which will be passed a pointer to this object. c |jdd}|jdd= |jj|j=n#t$rYnwxYw|D]} t |r ||#t $rY tjnA#t$r4tj d}td|d|d|YnwxYwYwxYwdS)z=Set self.isDead to True when method or instance is destroyed.NzException during saferef z cleanup function z: ) rr)rr&KeyErrorr Exception traceback print_excrsysexc_infoprint)weakselfmethodsfunctiones rremovez+BoundMethodWeakref.__init__..removes<+AAA.G%aaa( N1$(;;    # P P P))'  PPPP!+----)PPPLNN1-<@DD(((AA OPPPPPPP P PsB. ;;A C)A=<C=;B;8C:B;;CCN) rrr&rget_funcrr weak_self weak_funcstr self_name__name__ func_name)r5rrr9r r s rr"zBoundMethodWeakref.__init__s # P P P P&"+ %%f--6""6"" Wf55 Wf55WW-..r crtt|tt|fS)zCalculate the reference key for this reference. Currently this is a two-tuple of the id()'s of the target object and the target function respectively. )idrr:)r#rs rrz BoundMethodWeakref.calculate_keys/ 8F##$$b&)9)9&:&:;;r c@|jjd|jd|jdS)z-Give a friendly representation of the object.(.))r)r?r>r@r5s r__str__zBoundMethodWeakref.__str__s. N # # # NNN NNN r c|duS)z'Whether we are still a valid reference.NrGs r __nonzero__zBoundMethodWeakref.__nonzero__stvvT!!r ct||js"t|jt|St|j|jS)zCompare with another reference.) isinstancer)cmptyper&)r5others r__cmp__zBoundMethodWeakref.__cmp__sB%00 4t~tE{{33 348UY'''r c|}|+|}|||SdS)a?Return a strong reference to the bound method. If the target cannot be retrieved, then will return None, otherwise returns a bound instance method for our object and function. Note: You may call this method any number of times, as it does not invalidate the reference. N)r;r<__get__)r5rr7s rrzBoundMethodWeakref.__call__sG!!  ~~''H#''///tr N)r? __module__ __qualname____doc__rWeakValueDictionaryrr!r"r classmethodrH__repr__rKrQr __classcell__)r)s@rrrXsB1W022N,*/*/*/*/X<<< K ..MH"""((( r rrT)rWoperatorr1r/rr NameError version_info attrgetterrr:rrrrJr rr`s!F43 + HH+++++++++ d"x"9--H"x"9--HH"x":..H"x":..H