PK!mj((carly/__init__.pyfrom __future__ import print_function from twisted.internet.defer import Deferred, gatherResults from twisted.internet import reactor from types import ClassType class BoundHook(object): def __init__(self, hooked, original, instance): self.hooked = hooked self.original = original self.instance = instance def __call__(self, *args, **kw): result = self.original(self.instance, *args, **kw) self.hooked.called.callback(self.instance) self.hooked.called = Deferred() return result class HookedCall(object): def __init__(self, class_, hook): self.called = Deferred() self.original = getattr(class_, hook) def __get__(self, instance, owner): if instance is None: return self return BoundHook(self.called, self.original, instance) def hook(class_, *hooks): methods = {} for hook in hooks: d = Deferred() methods[hook] = HookedCall(class_, hook) if issubclass(class_, object): type_ = type else: # pragma: no cover # some protocols don't have object has a base class! type_ = ClassType return type_('Hooked'+class_.__name__, (class_,), methods) def waitUntilAll(**deferreds): for name, d in deferreds.items(): # This short timeout is important so that if something goes wrong, we find # out about it soon, rather than blocking forever on something that can # can no longer happen. d.addTimeout(0.2, reactor) return gatherResults(deferreds.values()) PK!HqfWXcarly-0.1.1.dist-info/WHEEL A н#f."jm)!fb҅~ܴA,mTD}E n0H饹*|D[¬c i=0(q3PK!H6!v carly-0.1.1.dist-info/METADATAMO1smX5_]vZ:5 1 +o̐l+w4+ rTi>YT7p\Ν?g5PuW#Jw3bG)~8MQJ9)e e4hQNB3uMgJ8rrzYH W?3VoK1&Luπ/քnIPK!mj((carly/__init__.pyPK!HqfWXWcarly-0.1.1.dist-info/WHEELPK!H6!v carly-0.1.1.dist-info/METADATAPK!H{0 Ccarly-0.1.1.dist-info/RECORDPKH