mirror of
https://github.com/python/cpython.git
synced 2025-11-01 14:11:41 +00:00
GH-94597: Deprecate child watcher getters and setters (#98215)
This is the next step for deprecating child watchers. Until we've removed the API completely we have to use it, so this PR is mostly suppressing a lot of warnings when using the API internally. Once the child watcher API is totally removed, the two child watcher implementations we actually use and need (Pidfd and Thread) will be turned into internal helpers.
This commit is contained in:
parent
bb56dead33
commit
660f10248b
9 changed files with 104 additions and 51 deletions
|
|
@ -582,7 +582,9 @@ async def kill_running():
|
|||
# manually to avoid a warning when the watcher is detached.
|
||||
if (sys.platform != 'win32' and
|
||||
isinstance(self, SubprocessFastWatcherTests)):
|
||||
asyncio.get_child_watcher()._callbacks.clear()
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
asyncio.get_child_watcher()._callbacks.clear()
|
||||
|
||||
async def _test_popen_error(self, stdin):
|
||||
if sys.platform == 'win32':
|
||||
|
|
@ -696,13 +698,17 @@ def setUp(self):
|
|||
|
||||
watcher = self._get_watcher()
|
||||
watcher.attach_loop(self.loop)
|
||||
policy.set_child_watcher(watcher)
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
policy.set_child_watcher(watcher)
|
||||
|
||||
def tearDown(self):
|
||||
super().tearDown()
|
||||
policy = asyncio.get_event_loop_policy()
|
||||
watcher = policy.get_child_watcher()
|
||||
policy.set_child_watcher(None)
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
watcher = policy.get_child_watcher()
|
||||
policy.set_child_watcher(None)
|
||||
watcher.attach_loop(None)
|
||||
watcher.close()
|
||||
|
||||
|
|
@ -752,7 +758,9 @@ def test_create_subprocess_fails_with_inactive_watcher(self):
|
|||
)
|
||||
|
||||
async def execute():
|
||||
asyncio.set_child_watcher(watcher)
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
asyncio.set_child_watcher(watcher)
|
||||
|
||||
with self.assertRaises(RuntimeError):
|
||||
await subprocess.create_subprocess_exec(
|
||||
|
|
@ -761,7 +769,9 @@ async def execute():
|
|||
watcher.add_child_handler.assert_not_called()
|
||||
|
||||
with asyncio.Runner(loop_factory=asyncio.new_event_loop) as runner:
|
||||
self.assertIsNone(runner.run(execute()))
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter('ignore', DeprecationWarning)
|
||||
self.assertIsNone(runner.run(execute()))
|
||||
self.assertListEqual(watcher.mock_calls, [
|
||||
mock.call.__enter__(),
|
||||
mock.call.__enter__().is_active(),
|
||||
|
|
@ -788,15 +798,16 @@ async def main():
|
|||
with self.assertRaises(RuntimeError):
|
||||
asyncio.get_event_loop_policy().get_event_loop()
|
||||
return await asyncio.to_thread(asyncio.run, in_thread())
|
||||
|
||||
asyncio.set_child_watcher(asyncio.PidfdChildWatcher())
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
asyncio.set_child_watcher(asyncio.PidfdChildWatcher())
|
||||
try:
|
||||
with asyncio.Runner(loop_factory=asyncio.new_event_loop) as runner:
|
||||
returncode, stdout = runner.run(main())
|
||||
self.assertEqual(returncode, 0)
|
||||
self.assertEqual(stdout, b'some data')
|
||||
finally:
|
||||
asyncio.set_child_watcher(None)
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
asyncio.set_child_watcher(None)
|
||||
else:
|
||||
# Windows
|
||||
class SubprocessProactorTests(SubprocessMixin, test_utils.TestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue