bubble-wrap 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +14 -9
- data/CHANGELOG.md +21 -2
- data/Gemfile.lock +8 -5
- data/README.md +54 -3
- data/Rakefile +7 -1
- data/lib/bubble-wrap/camera.rb +1 -1
- data/lib/bubble-wrap/core.rb +1 -1
- data/lib/bubble-wrap/font.rb +1 -1
- data/lib/bubble-wrap/loader.rb +4 -4
- data/lib/bubble-wrap/media.rb +1 -1
- data/lib/bubble-wrap/motion.rb +7 -1
- data/lib/bubble-wrap/version.rb +2 -2
- data/motion/core/app.rb +4 -0
- data/motion/core/device/ios/camera_wrapper.rb +1 -1
- data/motion/core/device/ios/screen.rb +2 -2
- data/motion/core/device/osx/screen.rb +1 -1
- data/motion/core/device/screen.rb +1 -1
- data/motion/core/ios/device.rb +1 -1
- data/motion/core/ios/ns_index_path.rb +11 -0
- data/motion/core/json.rb +2 -2
- data/motion/core/kvo.rb +118 -55
- data/motion/core/ns_notification_center.rb +2 -2
- data/motion/core/ns_url_request.rb +2 -2
- data/motion/core/osx/device.rb +1 -1
- data/motion/core/string.rb +7 -7
- data/motion/font/font.rb +1 -1
- data/motion/ios/8/location_constants.rb +21 -0
- data/motion/location/location.rb +38 -18
- data/motion/mail/result.rb +1 -1
- data/motion/media/media.rb +1 -1
- data/motion/motion/accelerometer.rb +55 -0
- data/motion/motion/device_motion.rb +139 -0
- data/motion/motion/gyroscope.rb +55 -0
- data/motion/motion/magnetometer.rb +55 -0
- data/motion/motion/motion.rb +0 -288
- data/motion/reactor.rb +3 -3
- data/motion/reactor/deferrable.rb +32 -32
- data/motion/reactor/periodic_timer.rb +1 -1
- data/motion/reactor/queue.rb +6 -6
- data/motion/reactor/thread_aware_deferrable.rb +1 -1
- data/motion/reactor/timer.rb +1 -1
- data/motion/rss_parser.rb +6 -3
- data/motion/shortcut.rb +1 -1
- data/motion/sms/result.rb +1 -1
- data/motion/test_suite_delegate.rb +1 -1
- data/motion/ui/ui_activity_view_controller_wrapper.rb +6 -1
- data/motion/ui/ui_alert_view.rb +21 -1
- data/motion/util/deprecated.rb +1 -1
- data/samples/alert/Gemfile.lock +1 -1
- data/spec/lib/bubble-wrap/requirement_spec.rb +2 -2
- data/spec/lib/bubble-wrap_spec.rb +1 -1
- data/spec/lib/motion_stub.rb +1 -1
- data/spec/motion/core/app_spec.rb +6 -0
- data/spec/motion/core/device/osx/screen_spec.rb +1 -1
- data/spec/motion/core/ios/ns_index_path_spec.rb +20 -0
- data/spec/motion/core/kvo_spec.rb +171 -58
- data/spec/motion/core/ns_notification_center_spec.rb +3 -3
- data/spec/motion/core/string_spec.rb +16 -16
- data/spec/motion/core_spec.rb +3 -3
- data/spec/motion/font/font_spec.rb +1 -1
- data/spec/motion/location/location_spec.rb +61 -9
- data/spec/motion/mail/result_spec.rb +7 -7
- data/spec/motion/media/player_spec.rb +1 -1
- data/spec/motion/reactor/thread_aware_deferrable_spec.rb +3 -3
- data/spec/motion/sms/result_spec.rb +6 -6
- data/spec/motion/ui/ui_alert_view_spec.rb +59 -1
- data/spec/motion/util/deprecated_spec.rb +1 -1
- metadata +17 -4
- data/motion/ios/7/uiactivity_view_controller_constants.rb +0 -10
@@ -0,0 +1,55 @@
|
|
1
|
+
module BubbleWrap
|
2
|
+
module Motion
|
3
|
+
class Magnetometer < GenericMotionInterface
|
4
|
+
|
5
|
+
def start(options={}, &handler)
|
6
|
+
if options.key?(:interval)
|
7
|
+
@manager.magnetometerUpdateInterval = options[:interval]
|
8
|
+
end
|
9
|
+
|
10
|
+
if handler
|
11
|
+
queue = convert_queue(options[:queue])
|
12
|
+
@manager.startMagnetometerUpdatesToQueue(queue, withHandler: internal_handler(handler))
|
13
|
+
else
|
14
|
+
@manager.startMagnetometerUpdates
|
15
|
+
end
|
16
|
+
|
17
|
+
return self
|
18
|
+
end
|
19
|
+
|
20
|
+
private def handle_result(result_data, error, handler)
|
21
|
+
if result_data
|
22
|
+
result = {
|
23
|
+
data: result_data,
|
24
|
+
field: result_data.magneticField,
|
25
|
+
x: result_data.magneticField.x,
|
26
|
+
y: result_data.magneticField.y,
|
27
|
+
z: result_data.magneticField.z,
|
28
|
+
}
|
29
|
+
else
|
30
|
+
result = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
handler.call(result, error)
|
34
|
+
end
|
35
|
+
|
36
|
+
def available?
|
37
|
+
@manager.magnetometerAvailable?
|
38
|
+
end
|
39
|
+
|
40
|
+
def active?
|
41
|
+
@manager.magnetometerActive?
|
42
|
+
end
|
43
|
+
|
44
|
+
def data
|
45
|
+
@manager.magnetometerData
|
46
|
+
end
|
47
|
+
|
48
|
+
def stop
|
49
|
+
@manager.stopMagnetometerUpdates
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
data/motion/motion/motion.rb
CHANGED
@@ -129,293 +129,5 @@ module BubbleWrap
|
|
129
129
|
|
130
130
|
end
|
131
131
|
|
132
|
-
class Accelerometer < GenericMotionInterface
|
133
|
-
|
134
|
-
def start(options={}, &handler)
|
135
|
-
if options.key?(:interval)
|
136
|
-
@manager.accelerometerUpdateInterval = options[:interval]
|
137
|
-
end
|
138
|
-
|
139
|
-
if handler
|
140
|
-
queue = convert_queue(options[:queue])
|
141
|
-
@manager.startAccelerometerUpdatesToQueue(queue, withHandler: internal_handler(handler))
|
142
|
-
else
|
143
|
-
@manager.startAccelerometerUpdates
|
144
|
-
end
|
145
|
-
|
146
|
-
return self
|
147
|
-
end
|
148
|
-
|
149
|
-
private def handle_result(result_data, error, handler)
|
150
|
-
if result_data
|
151
|
-
result = {
|
152
|
-
data: result_data,
|
153
|
-
acceleration: result_data.acceleration,
|
154
|
-
x: result_data.acceleration.x,
|
155
|
-
y: result_data.acceleration.y,
|
156
|
-
z: result_data.acceleration.z,
|
157
|
-
}
|
158
|
-
else
|
159
|
-
result = nil
|
160
|
-
end
|
161
|
-
|
162
|
-
handler.call(result, error)
|
163
|
-
end
|
164
|
-
|
165
|
-
def available?
|
166
|
-
@manager.accelerometerAvailable?
|
167
|
-
end
|
168
|
-
|
169
|
-
def active?
|
170
|
-
@manager.accelerometerActive?
|
171
|
-
end
|
172
|
-
|
173
|
-
def data
|
174
|
-
@manager.accelerometerData
|
175
|
-
end
|
176
|
-
|
177
|
-
def stop
|
178
|
-
@manager.stopAccelerometerUpdates
|
179
|
-
end
|
180
|
-
|
181
|
-
end
|
182
|
-
|
183
|
-
class Gyroscope < GenericMotionInterface
|
184
|
-
|
185
|
-
def start(options={}, &handler)
|
186
|
-
if options.key?(:interval)
|
187
|
-
@manager.gyroUpdateInterval = options[:interval]
|
188
|
-
end
|
189
|
-
|
190
|
-
if handler
|
191
|
-
queue = convert_queue(options[:queue])
|
192
|
-
@manager.startGyroUpdatesToQueue(queue, withHandler: internal_handler(handler))
|
193
|
-
else
|
194
|
-
@manager.startGyroUpdates
|
195
|
-
end
|
196
|
-
|
197
|
-
return self
|
198
|
-
end
|
199
|
-
|
200
|
-
private def handle_result(result_data, error, handler)
|
201
|
-
if result_data
|
202
|
-
result = {
|
203
|
-
data: result_data,
|
204
|
-
rotation: result_data.rotationRate,
|
205
|
-
x: result_data.rotationRate.x,
|
206
|
-
y: result_data.rotationRate.y,
|
207
|
-
z: result_data.rotationRate.z,
|
208
|
-
}
|
209
|
-
else
|
210
|
-
result = nil
|
211
|
-
end
|
212
|
-
|
213
|
-
handler.call(result, error)
|
214
|
-
end
|
215
|
-
|
216
|
-
def available?
|
217
|
-
@manager.gyroAvailable?
|
218
|
-
end
|
219
|
-
|
220
|
-
def active?
|
221
|
-
@manager.gyroActive?
|
222
|
-
end
|
223
|
-
|
224
|
-
def data
|
225
|
-
@manager.gyroData
|
226
|
-
end
|
227
|
-
|
228
|
-
def stop
|
229
|
-
@manager.stopGyroUpdates
|
230
|
-
end
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
class Magnetometer < GenericMotionInterface
|
235
|
-
|
236
|
-
def start(options={}, &handler)
|
237
|
-
if options.key?(:interval)
|
238
|
-
@manager.magnetometerUpdateInterval = options[:interval]
|
239
|
-
end
|
240
|
-
|
241
|
-
if handler
|
242
|
-
queue = convert_queue(options[:queue])
|
243
|
-
@manager.startMagnetometerUpdatesToQueue(queue, withHandler: internal_handler(handler))
|
244
|
-
else
|
245
|
-
@manager.startMagnetometerUpdates
|
246
|
-
end
|
247
|
-
|
248
|
-
return self
|
249
|
-
end
|
250
|
-
|
251
|
-
private def handle_result(result_data, error, handler)
|
252
|
-
if result_data
|
253
|
-
result = {
|
254
|
-
data: result_data,
|
255
|
-
field: result_data.magneticField,
|
256
|
-
x: result_data.magneticField.x,
|
257
|
-
y: result_data.magneticField.y,
|
258
|
-
z: result_data.magneticField.z,
|
259
|
-
}
|
260
|
-
else
|
261
|
-
result = nil
|
262
|
-
end
|
263
|
-
|
264
|
-
handler.call(result, error)
|
265
|
-
end
|
266
|
-
|
267
|
-
def available?
|
268
|
-
@manager.magnetometerAvailable?
|
269
|
-
end
|
270
|
-
|
271
|
-
def active?
|
272
|
-
@manager.magnetometerActive?
|
273
|
-
end
|
274
|
-
|
275
|
-
def data
|
276
|
-
@manager.magnetometerData
|
277
|
-
end
|
278
|
-
|
279
|
-
def stop
|
280
|
-
@manager.stopMagnetometerUpdates
|
281
|
-
end
|
282
|
-
|
283
|
-
end
|
284
|
-
|
285
|
-
class DeviceMotion < GenericMotionInterface
|
286
|
-
|
287
|
-
def start(options={}, &handler)
|
288
|
-
if options.key?(:interval)
|
289
|
-
@manager.deviceMotionUpdateInterval = options[:interval]
|
290
|
-
end
|
291
|
-
|
292
|
-
if options.key?(:reference)
|
293
|
-
reference_frame = convert_reference_frame(options[:reference])
|
294
|
-
else
|
295
|
-
reference_frame = nil
|
296
|
-
end
|
297
|
-
|
298
|
-
if handler
|
299
|
-
queue = convert_queue(options[:queue])
|
300
|
-
|
301
|
-
if reference_frame
|
302
|
-
@manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame, toQueue: queue, withHandler: internal_handler(handler))
|
303
|
-
else
|
304
|
-
@manager.startDeviceMotionUpdatesToQueue(queue, withHandler: internal_handler(handler))
|
305
|
-
end
|
306
|
-
else
|
307
|
-
if reference_frame
|
308
|
-
@manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame)
|
309
|
-
else
|
310
|
-
@manager.startDeviceMotionUpdates
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
return self
|
315
|
-
end
|
316
|
-
|
317
|
-
private def handle_result(result_data, error, handler)
|
318
|
-
if result_data
|
319
|
-
result = {
|
320
|
-
data: result_data,
|
321
|
-
attitude: result_data.attitude,
|
322
|
-
rotation: result_data.rotationRate,
|
323
|
-
gravity: result_data.gravity,
|
324
|
-
acceleration: result_data.userAcceleration,
|
325
|
-
magnetic: result_data.magneticField,
|
326
|
-
}
|
327
|
-
|
328
|
-
if result_data.attitude
|
329
|
-
result.merge!({
|
330
|
-
roll: result_data.attitude.roll,
|
331
|
-
pitch: result_data.attitude.pitch,
|
332
|
-
yaw: result_data.attitude.yaw,
|
333
|
-
matrix: result_data.attitude.rotationMatrix,
|
334
|
-
quaternion: result_data.attitude.quaternion,
|
335
|
-
})
|
336
|
-
end
|
337
|
-
|
338
|
-
if result_data.rotationRate
|
339
|
-
result.merge!({
|
340
|
-
rotation_x: result_data.rotationRate.x,
|
341
|
-
rotation_y: result_data.rotationRate.y,
|
342
|
-
rotation_z: result_data.rotationRate.z,
|
343
|
-
})
|
344
|
-
end
|
345
|
-
|
346
|
-
if result_data.gravity
|
347
|
-
result.merge!({
|
348
|
-
gravity_x: result_data.gravity.x,
|
349
|
-
gravity_y: result_data.gravity.y,
|
350
|
-
gravity_z: result_data.gravity.z,
|
351
|
-
})
|
352
|
-
end
|
353
|
-
|
354
|
-
if result_data.userAcceleration
|
355
|
-
result.merge!({
|
356
|
-
acceleration_x: result_data.userAcceleration.x,
|
357
|
-
acceleration_y: result_data.userAcceleration.y,
|
358
|
-
acceleration_z: result_data.userAcceleration.z,
|
359
|
-
})
|
360
|
-
end
|
361
|
-
|
362
|
-
if result_data.magneticField
|
363
|
-
case result_data.magneticField.accuracy
|
364
|
-
when CMMagneticFieldCalibrationAccuracyLow
|
365
|
-
accuracy = :low
|
366
|
-
when CMMagneticFieldCalibrationAccuracyMedium
|
367
|
-
accuracy = :medium
|
368
|
-
when CMMagneticFieldCalibrationAccuracyHigh
|
369
|
-
accuracy = :high
|
370
|
-
end
|
371
|
-
|
372
|
-
result.merge!({
|
373
|
-
field: result_data.magneticField.field,
|
374
|
-
magnetic_x: result_data.magneticField.field.x,
|
375
|
-
magnetic_y: result_data.magneticField.field.y,
|
376
|
-
magnetic_z: result_data.magneticField.field.z,
|
377
|
-
magnetic_accuracy: accuracy,
|
378
|
-
})
|
379
|
-
end
|
380
|
-
else
|
381
|
-
result = nil
|
382
|
-
end
|
383
|
-
|
384
|
-
handler.call(result, error)
|
385
|
-
end
|
386
|
-
|
387
|
-
def convert_reference_frame(reference_frame)
|
388
|
-
case reference_frame
|
389
|
-
when :arbitrary_z
|
390
|
-
CMAttitudeReferenceFrameXArbitraryZVertical
|
391
|
-
when :corrected_z
|
392
|
-
CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
|
393
|
-
when :magnetic_north
|
394
|
-
CMAttitudeReferenceFrameXMagneticNorthZVertical
|
395
|
-
when :true_north
|
396
|
-
CMAttitudeReferenceFrameXTrueNorthZVertical
|
397
|
-
else
|
398
|
-
reference_frame
|
399
|
-
end
|
400
|
-
end
|
401
|
-
|
402
|
-
def available?
|
403
|
-
@manager.deviceMotionAvailable?
|
404
|
-
end
|
405
|
-
|
406
|
-
def active?
|
407
|
-
@manager.deviceMotionActive?
|
408
|
-
end
|
409
|
-
|
410
|
-
def data
|
411
|
-
@manager.deviceMotion
|
412
|
-
end
|
413
|
-
|
414
|
-
def stop
|
415
|
-
@manager.stopDeviceMotionUpdates
|
416
|
-
end
|
417
|
-
|
418
|
-
end
|
419
|
-
|
420
132
|
end
|
421
133
|
end
|
data/motion/reactor.rb
CHANGED
@@ -67,7 +67,7 @@ module BubbleWrap
|
|
67
67
|
# parameter (the "operation") and schedule it for asynchronous execution
|
68
68
|
# on a GCD concurrency queue. When the operation completes the result (if any)
|
69
69
|
# is passed into the callback (if present).
|
70
|
-
def defer(op=nil,cb=nil,&blk)
|
70
|
+
def defer(op=nil,cb=nil,&blk)
|
71
71
|
schedule do
|
72
72
|
result = (op||blk).call
|
73
73
|
schedule(result, &cb) if cb
|
@@ -76,7 +76,7 @@ module BubbleWrap
|
|
76
76
|
|
77
77
|
# A version of `defer` which schedules both the operator
|
78
78
|
# and callback operations on the application's main thread.
|
79
|
-
def defer_on_main(op=nil,cb=nil,&blk)
|
79
|
+
def defer_on_main(op=nil,cb=nil,&blk)
|
80
80
|
schedule_on_main do
|
81
81
|
result = (op||blk).call
|
82
82
|
schedule_on_main(result, &cb) if cb
|
@@ -105,7 +105,7 @@ module BubbleWrap
|
|
105
105
|
end
|
106
106
|
::Dispatch::Queue.main.async &cb
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
@@ -7,13 +7,13 @@ module BubbleWrap
|
|
7
7
|
# base.extend ::BubbleWrap::Reactor::Future
|
8
8
|
# end
|
9
9
|
|
10
|
-
# Specify a block to be executed if and when the Deferrable object
|
11
|
-
# receives a status of :succeeded. See set_deferred_status for more
|
10
|
+
# Specify a block to be executed if and when the Deferrable object
|
11
|
+
# receives a status of :succeeded. See set_deferred_status for more
|
12
12
|
# information.
|
13
|
-
# Calling this method on a Deferrable object whose status is not yet
|
14
|
-
# known will cause the callback block to be stored on an internal
|
15
|
-
# list. If you call this method on a Deferrable whose status is
|
16
|
-
# :succeeded, the block will be executed immediately, receiving
|
13
|
+
# Calling this method on a Deferrable object whose status is not yet
|
14
|
+
# known will cause the callback block to be stored on an internal
|
15
|
+
# list. If you call this method on a Deferrable whose status is
|
16
|
+
# :succeeded, the block will be executed immediately, receiving
|
17
17
|
# the parameters given to the prior set_deferred_status call.
|
18
18
|
def callback(&blk)
|
19
19
|
return unless blk
|
@@ -35,8 +35,8 @@ module BubbleWrap
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
# Specify a block to be executed if and when the Deferrable object
|
39
|
-
# receives a status of :failed. See set_deferred_status for more
|
38
|
+
# Specify a block to be executed if and when the Deferrable object
|
39
|
+
# receives a status of :failed. See set_deferred_status for more
|
40
40
|
# information.
|
41
41
|
def errback(&blk)
|
42
42
|
return unless blk
|
@@ -46,7 +46,7 @@ module BubbleWrap
|
|
46
46
|
blk.call(*@deferred_args)
|
47
47
|
elsif @deferred_status != :succeeded
|
48
48
|
@errbacks ||= []
|
49
|
-
@errbacks.unshift blk
|
49
|
+
@errbacks.unshift blk
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -81,31 +81,31 @@ module BubbleWrap
|
|
81
81
|
end
|
82
82
|
alias set_deferred_failure fail
|
83
83
|
|
84
|
-
# Sets the “disposition” (status) of the Deferrable object. See also
|
85
|
-
# the large set of sugarings for this method. Note that if you call
|
86
|
-
# this method without arguments, no arguments will be passed to the
|
87
|
-
# callback/errback. If the user has coded these with arguments,
|
88
|
-
# then the user code will throw an argument exception. Implementors
|
89
|
-
# of deferrable classes must document the arguments they will supply
|
84
|
+
# Sets the “disposition” (status) of the Deferrable object. See also
|
85
|
+
# the large set of sugarings for this method. Note that if you call
|
86
|
+
# this method without arguments, no arguments will be passed to the
|
87
|
+
# callback/errback. If the user has coded these with arguments,
|
88
|
+
# then the user code will throw an argument exception. Implementors
|
89
|
+
# of deferrable classes must document the arguments they will supply
|
90
90
|
# to user callbacks.
|
91
|
-
# OBSERVE SOMETHING VERY SPECIAL here: you may call this method even
|
92
|
-
# on the INSIDE of a callback. This is very useful when a
|
93
|
-
# previously-registered callback wants to change the parameters that
|
91
|
+
# OBSERVE SOMETHING VERY SPECIAL here: you may call this method even
|
92
|
+
# on the INSIDE of a callback. This is very useful when a
|
93
|
+
# previously-registered callback wants to change the parameters that
|
94
94
|
# will be passed to subsequently-registered ones.
|
95
95
|
# You may give either :succeeded or :failed as the status argument.
|
96
|
-
# If you pass :succeeded, then all of the blocks passed to the object
|
97
|
-
# using the callback method (if any) will be executed BEFORE the
|
98
|
-
# set_deferred_status method returns. All of the blocks passed to the
|
96
|
+
# If you pass :succeeded, then all of the blocks passed to the object
|
97
|
+
# using the callback method (if any) will be executed BEFORE the
|
98
|
+
# set_deferred_status method returns. All of the blocks passed to the
|
99
99
|
# object using errback will be discarded.
|
100
|
-
# If you pass :failed, then all of the blocks passed to the object
|
101
|
-
# using the errback method (if any) will be executed BEFORE the
|
102
|
-
# set_deferred_status method returns. All of the blocks passed to the
|
100
|
+
# If you pass :failed, then all of the blocks passed to the object
|
101
|
+
# using the errback method (if any) will be executed BEFORE the
|
102
|
+
# set_deferred_status method returns. All of the blocks passed to the
|
103
103
|
# object using # callback will be discarded.
|
104
|
-
# If you pass any arguments to set_deferred_status in addition to the
|
105
|
-
# status argument, they will be passed as arguments to any callbacks
|
106
|
-
# or errbacks that are executed. It’s your responsibility to ensure
|
107
|
-
# that the argument lists specified in your callbacks and errbacks match
|
108
|
-
# the arguments given in calls to set_deferred_status, otherwise Ruby
|
104
|
+
# If you pass any arguments to set_deferred_status in addition to the
|
105
|
+
# status argument, they will be passed as arguments to any callbacks
|
106
|
+
# or errbacks that are executed. It’s your responsibility to ensure
|
107
|
+
# that the argument lists specified in your callbacks and errbacks match
|
108
|
+
# the arguments given in calls to set_deferred_status, otherwise Ruby
|
109
109
|
# will raise an ArgumentError.
|
110
110
|
def set_deferred_status(status, *args)
|
111
111
|
cancel_timeout
|
@@ -137,9 +137,9 @@ module BubbleWrap
|
|
137
137
|
end
|
138
138
|
alias set_deferred_success succeed
|
139
139
|
|
140
|
-
# Setting a timeout on a Deferrable causes it to go into the failed
|
141
|
-
# state after the Timeout expires (passing no arguments to the object’s
|
142
|
-
# errbacks). Setting the status at any time prior to a call to the
|
140
|
+
# Setting a timeout on a Deferrable causes it to go into the failed
|
141
|
+
# state after the Timeout expires (passing no arguments to the object’s
|
142
|
+
# errbacks). Setting the status at any time prior to a call to the
|
143
143
|
# expiration of the timeout will cause the timer to be cancelled.
|
144
144
|
def timeout(seconds)
|
145
145
|
cancel_timeout
|