diff --git a/application/python/weakref.py b/application/python/weakref.py index 09e9b0b..e29742a 100644 --- a/application/python/weakref.py +++ b/application/python/weakref.py @@ -10,7 +10,7 @@ from threading import local -__all__ = ["weakobjectmap"] +__all__ = ["weakobjectmap", "defaultweakobjectmap"] class objectref(weakref.ref): @@ -153,6 +153,15 @@ def popitem(self): return object, value +class defaultweakobjectmap(weakobjectmap): + def __init__(self, factory, *args, **kw): + self.default_factory = factory + super(defaultweakobjectmap, self).__init__(*args, **kw) + + def __missing__(self, key): + return self.setdefault(key.object, self.default_factory()) + + class _ReprGuard(object): __local__ = local()