import weakref | |
class RemovableHandle(object): | |
"""A handle which provides the capability to remove a hook.""" | |
next_id = 0 | |
def __init__(self, hooks_dict): | |
self.hooks_dict_ref = weakref.ref(hooks_dict) | |
self.id = RemovableHandle.next_id | |
RemovableHandle.next_id += 1 | |
def remove(self): | |
hooks_dict = self.hooks_dict_ref() | |
if hooks_dict is not None and self.id in hooks_dict: | |
del hooks_dict[self.id] | |
def __enter__(self): | |
return self | |
def __exit__(self, type, value, tb): | |
self.remove() |