mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-14 17:47:05 +08:00
Remove finalize from compatibility
This commit is contained in:
@@ -514,55 +514,3 @@ def which(cmd, mode=os.F_OK | os.X_OK, path=None):
|
|||||||
if _access_check(name, mode):
|
if _access_check(name, mode):
|
||||||
return name
|
return name
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
if not is_py3:
|
|
||||||
# Simplified backport of Python 3 weakref.finalize:
|
|
||||||
# https://github.com/python/cpython/blob/ded4737989316653469763230036b04513cb62b3/Lib/weakref.py#L502-L662
|
|
||||||
class finalize(object):
|
|
||||||
"""Class for finalization of weakrefable objects.
|
|
||||||
|
|
||||||
finalize(obj, func, *args, **kwargs) returns a callable finalizer
|
|
||||||
object which will be called when obj is garbage collected. The
|
|
||||||
first time the finalizer is called it evaluates func(*arg, **kwargs)
|
|
||||||
and returns the result. After this the finalizer is dead, and
|
|
||||||
calling it just returns None.
|
|
||||||
|
|
||||||
When the program exits any remaining finalizers will be run.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Finalizer objects don't have any state of their own.
|
|
||||||
# This ensures that they cannot be part of a ref-cycle.
|
|
||||||
__slots__ = ()
|
|
||||||
_registry = {}
|
|
||||||
|
|
||||||
def __init__(self, obj, func, *args, **kwargs):
|
|
||||||
info = functools.partial(func, *args, **kwargs)
|
|
||||||
info.weakref = weakref.ref(obj, self)
|
|
||||||
self._registry[self] = info
|
|
||||||
|
|
||||||
# To me it's an absolute mystery why in Python 2 we need _=None. It
|
|
||||||
# makes really no sense since it's never really called. Then again it
|
|
||||||
# might be called by Python 2.7 itself, but weakref.finalize is not
|
|
||||||
# documented in Python 2 and therefore shouldn't be randomly called.
|
|
||||||
# We never call this stuff with a parameter and therefore this
|
|
||||||
# parameter should not be needed. But it is. ~dave
|
|
||||||
def __call__(self, _=None):
|
|
||||||
"""Return func(*args, **kwargs) if alive."""
|
|
||||||
info = self._registry.pop(self, None)
|
|
||||||
if info:
|
|
||||||
return info()
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _exitfunc(cls):
|
|
||||||
if not cls._registry:
|
|
||||||
return
|
|
||||||
for finalizer in list(cls._registry):
|
|
||||||
try:
|
|
||||||
finalizer()
|
|
||||||
except Exception:
|
|
||||||
sys.excepthook(*sys.exc_info())
|
|
||||||
assert finalizer not in cls._registry
|
|
||||||
|
|
||||||
atexit.register(finalize._exitfunc)
|
|
||||||
weakref.finalize = finalize
|
|
||||||
|
|||||||
Reference in New Issue
Block a user