[Twisted-Python] How to chain deferred calls

Valeriy Pogrebitskiy vpogrebi at verizon.net
Thu Oct 22 17:15:19 MDT 2009


After taking closer look at your code - this is obvious...

To use callbacks - you MUST use deferred. In your case - each method in a
chain (except the last one) must return deferred. Without that - you can't
construct such chain.

Your abc1() and abc2() must return deferred (or be decorated by a method
that returns deferred)...

Kind regards,
 
Valeriy Pogrebitskiy
Email: vpogrebi at iname.com
 
 

-----Original Message-----
From: twisted-python-bounces at twistedmatrix.com
[mailto:twisted-python-bounces at twistedmatrix.com] On Behalf Of
vitaly at synapticvision.com
Sent: Thursday, October 22, 2009 6:38 PM
To: twisted-python at twistedmatrix.com
Subject: Re: [Twisted-Python] How to chain deferred calls


me too,
may be its because of the way I'm calling the chain:

return (
   self.abc1().
   addErrback(self.handleFailure1).
   addCallback(self.abc2,args).
   addCallback(self.abc3).
   addErrback(self.handleFailure2)
)

I see no call to self.handleFailure1() at all, abc1() just fail on  
exception (if it was raised).

Quoting "Valeriy Pogrebitskiy" <vpogrebi at verizon.net>:

> I am confused... If an exception is being raised in adc1() - errback is
> supposed to be called and passed your Exception instance (wrapped up as an
> instance of twisted.python.failure.Failure).
>
> Kind regards,
>
> Valeriy Pogrebitskiy
> Email: vpogrebi at iname.com
>
>
> -----Original Message-----
> From: twisted-python-bounces at twistedmatrix.com
> [mailto:twisted-python-bounces at twistedmatrix.com] On Behalf Of
> vitaly at synapticvision.com
> Sent: Thursday, October 22, 2009 2:02 PM
> To: twisted-python at twistedmatrix.com
> Subject: Re: [Twisted-Python] How to chain deferred calls
>
>
> Thank you for response.
>
> the issue is if adc1() will raise up an exception, than following it
> .addErrback() will never be called cause adc1() will exit or raise
> Exception.
>
> Quoting "Valeriy Pogrebitskiy" <vpogrebi at verizon.net>:
>
>> Add another .addErrback() directly after adc1() - to handle that
>> specific exception...
>>
>>
>> Kind regards,
>>
>> Valeriy Pogrebitskiy
>> vpogrebi at verizon.net
>>
>>
>>
>>
>> On Oct 21, 2009, at 4:12 PM, vitaly at synapticvision.com wrote:
>>
>>> hi,
>>> how can I chain in defer methods that could raise exception while
>>> showing the exception that coming from method? I mean, if I'll do:
>>> return (
>>>   adc1().abc2().abc3().addErrback("Common2AllException")
>>> )
>>> than "Common2AllException" will be raised if abc1() raise Exception,
>>> but I'd like to see the adc1() own exception (and not
>>> "Common2AllException") ?
>>>
>>>
>>>
>>> t = Test()
>>> def abc1(self):
>>>   if t.test() is None:
>>>     raise Exception("Error11")
>>>   else:
>>>     return 1
>>>
>>> def abc2(self):
>>>   if t.test() is None:
>>>     raise Exception("Error12")
>>>   else:
>>>     return 1
>>>
>>> def abc3(self):
>>>   if t.test() is None:
>>>     raise Exception("Error13")
>>>   else:
>>>     return 1
>>>
>>>
>>>
>>>
>>> Appreciate the help.
>>>
>>>
>>> _______________________________________________
>>> Twisted-Python mailing list
>>> Twisted-Python at twistedmatrix.com
>>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>>
>> _______________________________________________
>> Twisted-Python mailing list
>> Twisted-Python at twistedmatrix.com
>> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>



_______________________________________________
Twisted-Python mailing list
Twisted-Python at twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python





More information about the Twisted-Python mailing list