[Twisted-Python] A Python metaclass for Twisted allowing __init__ to return a Deferred
Terry Jones
terry at jon.es
Sun Nov 2 16:48:20 MST 2008
I just posted a blog article with title as above: http://bit.ly/1whZUK
Very briefly, I wrote a metaclass to allow you to write classes whose
__init__ method uses deferreds. Your __init__ can create deferreds, call
functions that return deferreds, and of course return a deferred itself
(that's the whole point). Your class instance wont be available until after
the deferred your __init__ returns has fired.
You use it like this:
from txDeferredInitMeta import TxDeferredInitMeta
class MyClass(object):
__metaclass__ = TxDeferredInitMeta
def __init__(self):
d = aFuncReturningADeferred()
return d
def cb((instance, result)):
# instance is an instance of MyClass
# result is from the callback chain of aFuncReturningADeferred
pass
d = MyClass()
d.__instantiate__()
d.addCallback(cb)
Metaclass code & test suite at http://foss.fluidinfo.com/txDeferredInitMeta.zip
For more details on how it works see http://bit.ly/1whZUK
I'll be happy to explain why this is useful if anyone cares. Or maybe
there's a better way to do this that I don't know about. I always have the
feeling that I know just the barest amount about what's out there in the
Twisted codebase, and that every problem I run into must have already been
encountered by many and solved in some insanely elegant and general way.
In any case, I had fun.
Terry
More information about the Twisted-Python
mailing list