1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 from twisted.internet import defer
19 from twisted.python import failure
20 import cancellable_defer
21
22
23 if not hasattr(defer.Deferred(), 'cancel'):
24 Deferred = cancellable_defer.CancellableDeferred
25 CancelledError = cancellable_defer.CancelledError
26 else:
27 Deferred = defer.Deferred
28 CancelledError = defer.CancelledError
29
30
32 """
33 see L{twisted.internet.defer.succeed}.
34
35 @rtype: L{Deferred}
36 """
37 d = Deferred()
38 d.callback(result)
39 return d
40
41 -def fail(result=None):
42 """
43 see L{twisted.internet.defer.fail}. The biggest difference is that the
44 twisted API allows you to call this without any parameters, which leads to
45 an error. See http://twistedmatrix.com/trac/ticket/3145.
46
47 @rtype: L{Deferred}
48 """
49 d = Deferred()
50 d.errback(result)
51 return d
52
54 """
55 see L{twisted.internet.defer.execute}.
56
57 @rtype: L{Deferred}
58 """
59 try:
60 result = callable(*args, **kw)
61 except Exception, exc:
62 return fail(exc)
63 else:
64 return succeed(result)
65
66
68
69 if hasattr(deferred, 'cancel'):
70 deferred.cancel()
71 else:
72 msg = 'Callback timed out'
73 deferred.errback(failure.Failure(defer.TimeoutError(msg)))
74
76 """
77 Accumulator to use with gobject signals where callbacks are supposed to
78 return a Deferred. With this, emit() will return a list of all the
79 Deferred returned by the connected callbacks. It ignores callback return
80 values that are not Deferreds.
81
82 @param invocation_hint: (signal_id, detail, run_type) (this parameter is
83 ignored)
84 @type invocation_hint: C{tuple}
85 @param return_accu: a list of Deferred (or possibly None)
86 @type return_accu: C{list}
87 @param handler_return: The return value of the signal handler
88 @type handler_return: C{elisa.core.utils.Deferred}
89
90 @return: a tuple containing True and a list of deferreds.
91 @rtype: C{tuple}
92 """
93 accu = return_accu
94 if accu == None:
95 accu = []
96 if not isinstance(handler_return, Deferred):
97 return True, accu
98 return True, accu + [handler_return]
99
100
101 DeferredList = defer.DeferredList
102
103 FAILURE = defer.FAILURE
104 SUCCESS = defer.SUCCESS
105 TimeoutError = defer.TimeoutError
106 AlreadyCalledError = defer.AlreadyCalledError
107
108 gatherResults = defer.gatherResults
109 maybeDeferred = defer.maybeDeferred
110 waitForDeferred = defer.waitForDeferred
111 deferredGenerator = defer.deferredGenerator
112 inlineCallbacks = defer.inlineCallbacks
113
114 DeferredLock = defer.DeferredLock
115 DeferredSemaphore = defer.DeferredSemaphore
116 DeferredQueue = defer.DeferredQueue
117
118
119 try:
120 DeferredFilesystemLock = defer.DeferredFilesystemLock
121 AlreadyTryingToLockError = defer.AlreadyTryingToLockError
122 except AttributeError:
123 pass
124