[Twisted-Python] How to chain deferred calls
vitaly at synapticvision.com
vitaly at synapticvision.com
Thu Oct 22 17:38:07 MDT 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