mirror of
https://github.com/python/cpython.git
synced 2025-10-22 14:42:22 +00:00
asyncio, Tulip issue 131: as_completed() and wait() now raises a TypeError if
the list of futures is not a list but a Future, Task or coroutine object
This commit is contained in:
parent
4e8d2f25e2
commit
eb74876e99
2 changed files with 30 additions and 0 deletions
|
@ -358,6 +358,8 @@ def wait(fs, *, loop=None, timeout=None, return_when=ALL_COMPLETED):
|
||||||
Note: This does not raise TimeoutError! Futures that aren't done
|
Note: This does not raise TimeoutError! Futures that aren't done
|
||||||
when the timeout occurs are returned in the second set.
|
when the timeout occurs are returned in the second set.
|
||||||
"""
|
"""
|
||||||
|
if isinstance(fs, futures.Future) or iscoroutine(fs):
|
||||||
|
raise TypeError("expect a list of futures, not %s" % type(fs).__name__)
|
||||||
if not fs:
|
if not fs:
|
||||||
raise ValueError('Set of coroutines/Futures is empty.')
|
raise ValueError('Set of coroutines/Futures is empty.')
|
||||||
|
|
||||||
|
@ -474,6 +476,8 @@ def as_completed(fs, *, loop=None, timeout=None):
|
||||||
|
|
||||||
Note: The futures 'f' are not necessarily members of fs.
|
Note: The futures 'f' are not necessarily members of fs.
|
||||||
"""
|
"""
|
||||||
|
if isinstance(fs, futures.Future) or iscoroutine(fs):
|
||||||
|
raise TypeError("expect a list of futures, not %s" % type(fs).__name__)
|
||||||
loop = loop if loop is not None else events.get_event_loop()
|
loop = loop if loop is not None else events.get_event_loop()
|
||||||
deadline = None if timeout is None else loop.time() + timeout
|
deadline = None if timeout is None else loop.time() + timeout
|
||||||
todo = {async(f, loop=loop) for f in set(fs)}
|
todo = {async(f, loop=loop) for f in set(fs)}
|
||||||
|
|
|
@ -7,6 +7,11 @@ import asyncio
|
||||||
from asyncio import test_utils
|
from asyncio import test_utils
|
||||||
|
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def coroutine_function():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Dummy:
|
class Dummy:
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
|
@ -1338,6 +1343,27 @@ class TaskTests(unittest.TestCase):
|
||||||
child2.set_result(2)
|
child2.set_result(2)
|
||||||
test_utils.run_briefly(self.loop)
|
test_utils.run_briefly(self.loop)
|
||||||
|
|
||||||
|
def test_as_completed_invalid_args(self):
|
||||||
|
fut = asyncio.Future(loop=self.loop)
|
||||||
|
|
||||||
|
# as_completed() expects a list of futures, not a future instance
|
||||||
|
self.assertRaises(TypeError, self.loop.run_until_complete,
|
||||||
|
asyncio.as_completed(fut, loop=self.loop))
|
||||||
|
self.assertRaises(TypeError, self.loop.run_until_complete,
|
||||||
|
asyncio.as_completed(coroutine_function(), loop=self.loop))
|
||||||
|
|
||||||
|
def test_wait_invalid_args(self):
|
||||||
|
fut = asyncio.Future(loop=self.loop)
|
||||||
|
|
||||||
|
# wait() expects a list of futures, not a future instance
|
||||||
|
self.assertRaises(TypeError, self.loop.run_until_complete,
|
||||||
|
asyncio.wait(fut, loop=self.loop))
|
||||||
|
self.assertRaises(TypeError, self.loop.run_until_complete,
|
||||||
|
asyncio.wait(coroutine_function(), loop=self.loop))
|
||||||
|
|
||||||
|
# wait() expects at least a future
|
||||||
|
self.assertRaises(ValueError, self.loop.run_until_complete,
|
||||||
|
asyncio.wait([], loop=self.loop))
|
||||||
|
|
||||||
class GatherTestsBase:
|
class GatherTestsBase:
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue