[Twisted-Python] If the errbacks of a canceled Deferred are called with error other than CancelledError, is this acceptable?
exarkun at twistedmatrix.com
exarkun at twistedmatrix.com
Fri Jun 21 08:30:45 MDT 2013
On 10:26 am, terry at jon.es wrote:
>Hi Tom
>>Since most apis in twisted don't pass a canceller, the behavior is
>>a2+a3.
>
>Right. That was the intention (glyph's). It was expected that over time
>more Twisted apis that create deferreds would add cancellers. As I
>understand it, Kai Zhang is now adding cancellers to some apis
>returning
>deferreds, starting with the POP3 client.
>
>Based on JP's comment, I still think I'm missing something here.
>
>The only suggestion I've been making is that, if we wanted to, we could
>allow a value to be passed to the cancel call. That would allow errback
>functions to receive more information when a Deferred is canceled.
>You'd
>still get a CancelledError in any case, but the value would be in the
>exception instance as args[0], as in
An idea very much like this was discussed when Deferred cancellation was
being implemented. My recollection is that it was ultimately explicitly
rejected, though I don't remember why nor do I find discussion of it on
the ticket (#990) (lack of this information somewhere seems like a
failure of the development process). I admit the idea of being able to
get additional information passed through the system seems appealing to
me, but *not* having any additional information does simplify the
interface. Considering how much trouble people already have with
Deferreds without even bringing cancellation into play, maybe the
simpler interface is a good thing.
My earlier point was that any Deferred for which cancellation is not
already explicitly implemented already has a cancellation behavior: it
will fire its errback chain with `CancelledError`. It is an
incompatible change to replace this with a different exception type -
such as `ConnectionDone`.
This is slightly different than your suggestion, Terry, I think - in
that you propose sticking more information onto the `CancelledError`,
not changing the type of the `Failure` that is sent down the errback
chain. However, the thread was started specifically with the question
of whether changing `CancelledError` to `ConnectionDone` is acceptable
and that's the point I was mainly focused on.
Jean-Paul
More information about the Twisted-Python
mailing list