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.2.dist-info/WHEEL A н#f."jm)!fb҅~ܴA,mTD}E n0H饹*|D[¬c i=0(q3PK!HYFcarly-0.1.2.dist-info/METADATARN1+Ra4j$u3\ixہvI\ήy69S zN!+Si rA\LeW,jk5 !!,z `\ n 9%GW|D7L{#bD%8 {xod1=2119FR %V0ڲ2aί Zm{ٟ0I\Q7Qy`ðv:$sMvE5!ƺm˗۶|yZqZZS85B]vq1εPK!Hcarly-0.1.2.dist-info/RECORDu̱0oizG)C*1""_o} Øsը:)'\abwSwP쯫Eu,=AӰ dTw9q0A:}B_UvtF*n'l6=8WV24 4 N9t ]G rz4{_d3`b~YcEPK!mj((carly/__init__.pyPK!HqfWXWcarly-0.1.2.dist-info/WHEELPK!HYFcarly-0.1.2.dist-info/METADATAPK!HBcarly-0.1.2.dist-info/RECORDPKH