[Python-checkins] cpython (3.4): asyncio.tasks: Make sure CoroWrapper.send proxies one argument correctly
yury.selivanov
python-checkins at python.org
Tue Apr 15 18:02:26 CEST 2014
http://hg.python.org/cpython/rev/2729823525fe
changeset: 90324:2729823525fe
branch: 3.4
parent: 90319:4c65f8641d89
user: Yury Selivanov <yselivanov at sprymix.com>
date: Tue Apr 15 12:01:16 2014 -0400
summary:
asyncio.tasks: Make sure CoroWrapper.send proxies one argument correctly
Issue #21209.
files:
Lib/asyncio/tasks.py | 2 +
Lib/test/test_asyncio/test_tasks.py | 18 +++++++++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -53,6 +53,8 @@
# We use `*value` because of a bug in CPythons prior
# to 3.4.1. See issue #21209 and test_yield_from_corowrapper
# for details. This workaround should be removed in 3.5.0.
+ if len(value) == 1:
+ value = value[0]
return self.gen.send(value)
def throw(self, exc):
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -1410,6 +1410,24 @@
finally:
asyncio.tasks._DEBUG = old_debug
+ def test_yield_from_corowrapper_send(self):
+ def foo():
+ a = yield
+ return a
+
+ def call(arg):
+ cw = asyncio.tasks.CoroWrapper(foo(), foo)
+ cw.send(None)
+ try:
+ cw.send(arg)
+ except StopIteration as ex:
+ return ex.args[0]
+ else:
+ raise AssertionError('StopIteration was expected')
+
+ self.assertEqual(call((1, 2)), (1, 2))
+ self.assertEqual(call('spam'), 'spam')
+
class GatherTestsBase:
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list