[Twisted-Python] How to chain deferred calls

vitaly at synapticvision.com vitaly at synapticvision.com
Thu Oct 22 19:38:07 EDT 2009


Correct, sorry, tried:

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


def abc1(self):
    if t.test() is None:
      raise Exception("Error11")
    else:
      d = defer.Deferred()
      d.callback(1)
      return d

Still in case of exception from abc1() - self.handleFailure1() never  
called, instead of it abc1() just fail.

Do I need "raise Exception("Error11")" also return as deferred ? Than how?


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

> 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
>
>
> _______________________________________________
> 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