[Twisted-Python] deferred proposed update
Fabrice Coudert
fabrice.coudert at free.fr
Fri Jan 16 10:22:58 EST 2004
Hi,
I 'd like to add a pre-processing and post-processing callback in a
deferred callback list. I did somthing like this :
my_defer = getADeferredForSomething()
new_defer = defer.Deferred()
new_defer.addCallback(preprocessing)
new_defer.chainDeferred(my_defer)
new_defer.addCallback(postprocessing)
my_defer = new_defer
My problem is that postprocessing doesn't receive the result of the last
callback in my_defer, but it reveive None.
This can be explained in twisted source by that chainDeferred(d) is
equivalent to addCallbacks(d.callback, d.errback), but this two methods
are not really sort of callback methods for deferred coz they didn't
return a result.
So I patched Deferred class to add "return self.result", and it works well :
Deferred_old = defer.Deferred
class Deferred_new(Deferred_old):
def callback(self, result):
Deferred_old.callback(self, result)
return self.result
def errback(self, fail=None):
Deferred_old.errback(self, fail)
return self.result
defer.Deferred = Deferred_new
Notes by doing this you can also get final result when firing the
callbacks :
final_result = my_defer.callback(result)
I dunno if this patch will fail something else in twisted.
fc.
More information about the Twisted-Python
mailing list