mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	[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:
		
							parent
							
								
									ebe7e6d86c
								
							
						
					
					
						commit
						b2779b2aa1
					
				
					 3 changed files with 45 additions and 12 deletions
				
			
		|  | @ -635,16 +635,17 @@ def __sleep0(): | ||||||
| 
 | 
 | ||||||
| async def sleep(delay, result=None, *, loop=None): | async def sleep(delay, result=None, *, loop=None): | ||||||
|     """Coroutine that completes after a given time (in seconds).""" |     """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: |     if delay <= 0: | ||||||
|         await __sleep0() |         await __sleep0() | ||||||
|         return result |         return result | ||||||
| 
 | 
 | ||||||
|     if loop is None: |     if loop is None: | ||||||
|         loop = events.get_running_loop() |         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() |     future = loop.create_future() | ||||||
|     h = loop.call_later(delay, |     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 |     after catching an exception (raised by one of the awaitables) from | ||||||
|     gather won't cancel any other awaitables. |     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 not coros_or_futures: | ||||||
|         if loop is None: |         if loop is None: | ||||||
|             loop = events.get_event_loop() |             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 = loop.create_future() | ||||||
|         outer.set_result([]) |         outer.set_result([]) | ||||||
|         return outer |         return outer | ||||||
|  |  | ||||||
|  | @ -1,8 +1,37 @@ | ||||||
| import os | 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. | # 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) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | Always show ``loop=`` arg deprecations in :func:`asyncio.gather` and | ||||||
|  | :func:`asyncio.sleep` | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Bull
						Sam Bull