]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
allow NullFutures in gen.multi 2266/head
authorMin RK <benjaminrk@gmail.com>
Thu, 1 Feb 2018 10:25:41 +0000 (11:25 +0100)
committerMin RK <benjaminrk@gmail.com>
Thu, 1 Feb 2018 10:25:41 +0000 (11:25 +0100)
is_future() only accepts 'real' futures, but NullFutures work here, too.

tornado/gen.py
tornado/test/gen_test.py

index 2b51c5f856a47f5a1bbefe72b2fb7328e8ffbff2..0ceda1d563a5717eab70b719b345f0ae433c08ec 100644 (file)
@@ -814,10 +814,7 @@ def multi_future(children, quiet_exceptions=()):
     else:
         keys = None
     children = list(map(convert_yielded, children))
-    # filter out NullFutures, like gen.moment
-    children = [child for child in children
-                if not isinstance(child, _NullFuture)]
-    assert all(is_future(i) for i in children)
+    assert all(is_future(i) or isinstance(i, _NullFuture) for i in children)
     unfinished_children = set(children)
 
     future = _create_future()
index f33ac3ca45130ccd337972243d4b9fdc03ab3fa2..12621ceccb4d99359ddac9e00010ba49974af538 100644 (file)
@@ -1603,10 +1603,12 @@ class RunnerGCTest(AsyncTestCase):
         # now that it's not a real Future
         @gen.coroutine
         def wait_a_moment():
-            yield gen.multi([gen.moment, gen.moment])
+            result = yield gen.multi([gen.moment, gen.moment])
+            raise gen.Return(result)
 
         loop = self.get_new_ioloop()
-        loop.run_sync(wait_a_moment)
+        result = loop.run_sync(wait_a_moment)
+        self.assertEqual(result, [None, None])
 
 
 if __name__ == '__main__':