[Python-checkins] bpo-32636: Fix @asyncio.coroutine debug mode bug exposed by gh-5250 (#5291)

Yury Selivanov webhook-mailer at python.org
Wed Jan 24 15:14:35 EST 2018


https://github.com/python/cpython/commit/fb5a7ad421ac20c49218ee4b86fb0d85ca4cd664
commit: fb5a7ad421ac20c49218ee4b86fb0d85ca4cd664
branch: master
author: Nathaniel J. Smith <njs at pobox.com>
committer: Yury Selivanov <yury at magic.io>
date: 2018-01-24T15:14:33-05:00
summary:

bpo-32636: Fix @asyncio.coroutine debug mode bug exposed by gh-5250 (#5291)

files:
M Lib/asyncio/coroutines.py
M Lib/test/test_asyncio/test_tasks.py

diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py
index 5a29100321f..c7fcd442558 100644
--- a/Lib/asyncio/coroutines.py
+++ b/Lib/asyncio/coroutines.py
@@ -132,8 +132,9 @@ def coro(*args, **kw):
                         res = yield from await_meth()
             return res
 
+    coro = types.coroutine(coro)
     if not _DEBUG:
-        wrapper = types.coroutine(coro)
+        wrapper = coro
     else:
         @functools.wraps(func)
         def wrapper(*args, **kwds):
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index daa1ff927e6..5e83a54ff28 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -9,6 +9,7 @@
 import random
 import re
 import sys
+import textwrap
 import types
 import unittest
 import weakref
@@ -3090,6 +3091,22 @@ def coro2():
         result = self.loop.run_until_complete(inner())
         self.assertEqual(['ok1', 'ok2'], result)
 
+    def test_debug_mode_interop(self):
+        # https://bugs.python.org/issue32636
+        code = textwrap.dedent("""
+            import asyncio
+
+            async def native_coro():
+                pass
+
+            @asyncio.coroutine
+            def old_style_coro():
+                yield from native_coro()
+
+            asyncio.run(old_style_coro())
+        """)
+        assert_python_ok("-c", code, PYTHONASYNCIODEBUG="1")
+
 
 if __name__ == '__main__':
     unittest.main()



More information about the Python-checkins mailing list