[Python-checkins] [3.9] bpo-44815: Always show deprecation in asyncio.gather/sleep() (GH-27569)

ambv webhook-mailer at python.org
Wed Aug 18 14:48:11 EDT 2021


https://github.com/python/cpython/commit/b2779b2aa16acb3fd1297ccfe2fe5aaa007f74ae
commit: b2779b2aa16acb3fd1297ccfe2fe5aaa007f74ae
branch: 3.9
author: Sam Bull <aa6bs0 at sambull.org>
committer: ambv <lukasz at langa.pl>
date: 2021-08-18T20:47:55+02:00
summary:

[3.9] bpo-44815: Always show deprecation in asyncio.gather/sleep() (GH-27569)

Co-authored-by: Łukasz Langa <lukasz at langa.pl>

files:
A Misc/NEWS.d/next/Library/2021-08-03-15-02-28.bpo-44815.9AmFfy.rst
M Lib/asyncio/tasks.py
M Lib/test/test_asyncio/__init__.py

diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index d6262ae75e6569..d7e0575ebd7fbb 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -635,16 +635,17 @@ def __sleep0():
 
 async def sleep(delay, result=None, *, loop=None):
     """Coroutine that completes after a given time (in seconds)."""
+    if loop is not None:
+        warnings.warn("The loop argument is deprecated since Python 3.8, "
+                      "and scheduled for removal in Python 3.10.",
+                      DeprecationWarning, stacklevel=2)
+
     if delay <= 0:
         await __sleep0()
         return result
 
     if loop is None:
         loop = events.get_running_loop()
-    else:
-        warnings.warn("The loop argument is deprecated since Python 3.8, "
-                      "and scheduled for removal in Python 3.10.",
-                      DeprecationWarning, stacklevel=2)
 
     future = loop.create_future()
     h = loop.call_later(delay,
@@ -750,13 +751,14 @@ def gather(*coros_or_futures, loop=None, return_exceptions=False):
     after catching an exception (raised by one of the awaitables) from
     gather won't cancel any other awaitables.
     """
+    if loop is not None:
+        warnings.warn("The loop argument is deprecated since Python 3.8, "
+                      "and scheduled for removal in Python 3.10.",
+                      DeprecationWarning, stacklevel=2)
+
     if not coros_or_futures:
         if loop is None:
             loop = events.get_event_loop()
-        else:
-            warnings.warn("The loop argument is deprecated since Python 3.8, "
-                          "and scheduled for removal in Python 3.10.",
-                          DeprecationWarning, stacklevel=2)
         outer = loop.create_future()
         outer.set_result([])
         return outer
diff --git a/Lib/test/test_asyncio/__init__.py b/Lib/test/test_asyncio/__init__.py
index c77c7a81278be7..230c35cfcf12cf 100644
--- a/Lib/test/test_asyncio/__init__.py
+++ b/Lib/test/test_asyncio/__init__.py
@@ -1,8 +1,37 @@
 import os
-from test.support import load_package_tests, import_module
+from test import support
+import unittest
 
 # Skip tests if we don't have concurrent.futures.
-import_module('concurrent.futures')
+support.import_module('concurrent.futures')
 
-def load_tests(*args):
-    return load_package_tests(os.path.dirname(__file__), *args)
+
+def load_tests(loader, _, pattern):
+    pkg_dir = os.path.dirname(__file__)
+    suite = AsyncioTestSuite()
+    return support.load_package_tests(pkg_dir, loader, suite, pattern)
+
+
+class AsyncioTestSuite(unittest.TestSuite):
+    """A custom test suite that also runs setup/teardown for the whole package.
+
+    Normally unittest only runs setUpModule() and tearDownModule() within each
+    test module part of the test suite. Copying those functions to each file
+    would be tedious, let's run this once and for all.
+    """
+    def run(self, result, debug=False):
+        ignore = support.ignore_deprecations_from
+        tokens = {
+            ignore("asyncio.base_events", like=r".*loop argument.*"),
+            ignore("asyncio.unix_events", like=r".*loop argument.*"),
+            ignore("asyncio.futures", like=r".*loop argument.*"),
+            ignore("asyncio.runners", like=r".*loop argument.*"),
+            ignore("asyncio.subprocess", like=r".*loop argument.*"),
+            ignore("asyncio.tasks", like=r".*loop argument.*"),
+            ignore("test.test_asyncio.test_queues", like=r".*loop argument.*"),
+            ignore("test.test_asyncio.test_tasks", like=r".*loop argument.*"),
+        }
+        try:
+            super().run(result, debug=debug)
+        finally:
+            support.clear_ignored_deprecations(*tokens)
diff --git a/Misc/NEWS.d/next/Library/2021-08-03-15-02-28.bpo-44815.9AmFfy.rst b/Misc/NEWS.d/next/Library/2021-08-03-15-02-28.bpo-44815.9AmFfy.rst
new file mode 100644
index 00000000000000..63dfbf3cd37946
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-08-03-15-02-28.bpo-44815.9AmFfy.rst
@@ -0,0 +1,2 @@
+Always show ``loop=`` arg deprecations in :func:`asyncio.gather` and
+:func:`asyncio.sleep`



More information about the Python-checkins mailing list