diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2023-01-13 12:40:29 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-13 12:40:29 (GMT) |
commit | e5bd5ad70d9e549eeb80aadb4f3ccb0f2f23266d (patch) | |
tree | 3c13553b04873b8cd80d10a877740031aa324b31 /Lib/test/test_asyncio/test_events.py | |
parent | 468c3bf79890ef614764b4e7543608876c792794 (diff) | |
download | cpython-e5bd5ad70d9e549eeb80aadb4f3ccb0f2f23266d.zip cpython-e5bd5ad70d9e549eeb80aadb4f3ccb0f2f23266d.tar.gz cpython-e5bd5ad70d9e549eeb80aadb4f3ccb0f2f23266d.tar.bz2 |
gh-100160: Restore and deprecate implicit creation of an event loop (GH-100410)
Partially revert changes made in GH-93453.
asyncio.DefaultEventLoopPolicy.get_event_loop() now emits a
DeprecationWarning and creates and sets a new event loop instead of
raising a RuntimeError if there is no current event loop set.
Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
Diffstat (limited to 'Lib/test/test_asyncio/test_events.py')
-rw-r--r-- | Lib/test/test_asyncio/test_events.py | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py index 093f8c1..214544b 100644 --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -2614,8 +2614,33 @@ class PolicyTests(unittest.TestCase): def test_get_event_loop(self): policy = asyncio.DefaultEventLoopPolicy() self.assertIsNone(policy._local._loop) - with self.assertRaisesRegex(RuntimeError, 'no current event loop'): - policy.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + loop = policy.get_event_loop() + self.assertEqual(cm.filename, __file__) + self.assertIsInstance(loop, asyncio.AbstractEventLoop) + + self.assertIs(policy._local._loop, loop) + self.assertIs(loop, policy.get_event_loop()) + loop.close() + + def test_get_event_loop_calls_set_event_loop(self): + policy = asyncio.DefaultEventLoopPolicy() + + with mock.patch.object( + policy, "set_event_loop", + wraps=policy.set_event_loop) as m_set_event_loop: + + with self.assertWarns(DeprecationWarning) as cm: + loop = policy.get_event_loop() + self.addCleanup(loop.close) + self.assertEqual(cm.filename, __file__) + + # policy._local._loop must be set through .set_event_loop() + # (the unix DefaultEventLoopPolicy needs this call to attach + # the child watcher correctly) + m_set_event_loop.assert_called_with(loop) + + loop.close() def test_get_event_loop_after_set_none(self): policy = asyncio.DefaultEventLoopPolicy() @@ -2801,8 +2826,10 @@ class GetEventLoopTestsMixin: loop = asyncio.new_event_loop() self.addCleanup(loop.close) - with self.assertRaisesRegex(RuntimeError, 'no current'): - asyncio.get_event_loop() + with self.assertWarns(DeprecationWarning) as cm: + loop2 = asyncio.get_event_loop() + self.addCleanup(loop2.close) + self.assertEqual(cm.filename, __file__) asyncio.set_event_loop(None) with self.assertRaisesRegex(RuntimeError, 'no current'): asyncio.get_event_loop() |