[Python-checkins] cpython (merge 3.5 -> default): Merge 3.5

yury.selivanov python-checkins at python.org
Wed Nov 18 12:40:46 EST 2015


https://hg.python.org/cpython/rev/de08cfd2e94f
changeset:   99203:de08cfd2e94f
parent:      99200:9d8eda95dd00
parent:      99202:6875b0bd3cd0
user:        Yury Selivanov <yselivanov at sprymix.com>
date:        Wed Nov 18 12:40:41 2015 -0500
summary:
  Merge 3.5

files:
  Lib/asyncio/coroutines.py            |   8 +++++-
  Lib/test/test_asyncio/test_pep492.py |  20 ++++++++++++++++
  2 files changed, 27 insertions(+), 1 deletions(-)


diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py
--- a/Lib/asyncio/coroutines.py
+++ b/Lib/asyncio/coroutines.py
@@ -140,7 +140,13 @@
 
     if compat.PY35:
 
-        __await__ = __iter__ # make compatible with 'await' expression
+        def __await__(self):
+            cr_await = getattr(self.gen, 'cr_await', None)
+            if cr_await is not None:
+                raise RuntimeError(
+                    "Cannot await on coroutine {!r} while it's "
+                    "awaiting for {!r}".format(self.gen, cr_await))
+            return self
 
         @property
         def gi_yieldfrom(self):
diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py
--- a/Lib/test/test_asyncio/test_pep492.py
+++ b/Lib/test/test_asyncio/test_pep492.py
@@ -203,6 +203,26 @@
 
         self.loop.run_until_complete(runner())
 
+    def test_double_await(self):
+        async def afunc():
+            await asyncio.sleep(0.1, loop=self.loop)
+
+        async def runner():
+            coro = afunc()
+            t = asyncio.Task(coro, loop=self.loop)
+            try:
+                await asyncio.sleep(0, loop=self.loop)
+                await coro
+            finally:
+                t.cancel()
+
+        self.loop.set_debug(True)
+        with self.assertRaisesRegex(
+            RuntimeError,
+            r'Cannot await.*test_double_await.*\bafunc\b.*while.*\bsleep\b'):
+
+            self.loop.run_until_complete(runner())
+
 
 if __name__ == '__main__':
     unittest.main()

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list