[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