pass
-class _DummyFuture(object):
+class Future(object):
def __init__(self):
self._done = False
self._result = None
cb(self)
self._callbacks = None
+
if futures is None:
- Future = _DummyFuture
+ FUTURES = Future
else:
- Future = futures.Future
+ FUTURES = (futures.Future, Future)
+def is_future(x):
+ return isinstance(x, FUTURES)
class TracebackFuture(Future):
"""Subclass of `Future` which can store a traceback with
import sys
import types
-from tornado.concurrent import Future, TracebackFuture
+from tornado.concurrent import TracebackFuture, is_future
from tornado.ioloop import IOLoop
from tornado.stack_context import ExceptionStackContext, wrap
children = children.values()
self.children = []
for i in children:
- if isinstance(i, Future):
+ if is_future(i):
i = YieldFuture(i)
self.children.append(i)
assert all(isinstance(i, YieldPoint) for i in self.children)
raise
if isinstance(yielded, (list, dict)):
yielded = Multi(yielded)
- elif isinstance(yielded, Future):
+ elif is_future(yielded):
yielded = YieldFuture(yielded)
if isinstance(yielded, YieldPoint):
self.yield_point = yielded
import time
import traceback
-from tornado.concurrent import Future, TracebackFuture
+from tornado.concurrent import TracebackFuture, is_future
from tornado.log import app_log, gen_log
from tornado import stack_context
from tornado.util import Configurable
future_cell[0] = TracebackFuture()
future_cell[0].set_exc_info(sys.exc_info())
else:
- if isinstance(result, Future):
+ if is_future(result):
future_cell[0] = result
else:
future_cell[0] = TracebackFuture()
The callback is invoked with one argument, the
`.Future`.
"""
- assert isinstance(future, Future)
+ assert is_future(future)
callback = stack_context.wrap(callback)
future.add_done_callback(
lambda future: self.add_callback(callback, future))
from tornado import stack_context
from tornado.tcpserver import TCPServer
from tornado.testing import AsyncTestCase, LogTrapTestCase, bind_unused_port, gen_test
-from tornado.test.util import unittest
try:
self.assertIs(future, future2)
self.assertEqual(future.result(), 42)
- @unittest.skipIf(futures is None, "futures module not present")
- def test_timeout_future(self):
- with self.assertRaises(futures.TimeoutError):
- future = self.async_future()
- # Do not call self.wait()
- future.result(timeout=.1)
-
@gen_test
def test_async_future_gen(self):
result = yield self.async_future()