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

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
Sam Bull 2021-08-18 19:47:55 +01:00 committed by GitHub
parent ebe7e6d86c
commit b2779b2aa1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 12 deletions

View file

@ -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 not coros_or_futures:
if loop is None:
loop = events.get_event_loop()
else:
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()
outer = loop.create_future()
outer.set_result([])
return outer

View file

@ -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)

View file

@ -0,0 +1,2 @@
Always show ``loop=`` arg deprecations in :func:`asyncio.gather` and
:func:`asyncio.sleep`