From: Jason R. Coombs Date: Wed, 13 Mar 2024 00:35:00 +0000 (-0400) Subject: [3.11] gh-116307: Proper fix for 'mod' leaking across importlib tests… (#116694) X-Git-Tag: v3.11.9~65 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=21a259eba5a1d13cf2c6b943b1f753f85d25ec58;p=thirdparty%2FPython%2Fcpython.git [3.11] gh-116307: Proper fix for 'mod' leaking across importlib tests… (#116694) [3.11] gh-116307: Proper fix for 'mod' leaking across importlib tests (GH-116680) (cherry picked from commit a2548077614f81f25a2c3465dabb7a0a3885c40c) gh-116307: Create a new import helper 'isolated modules' and use that instead of 'Clean Import' to ensure that tests from importlib_resources don't leave modules in sys.modules. --- diff --git a/Lib/test/support/import_helper.py b/Lib/test/support/import_helper.py index a803d9f1b403..8519194381a6 100644 --- a/Lib/test/support/import_helper.py +++ b/Lib/test/support/import_helper.py @@ -248,6 +248,26 @@ def modules_cleanup(oldmodules): sys.modules.update(oldmodules) +@contextlib.contextmanager +def isolated_modules(): + """ + Save modules on entry and cleanup on exit. + """ + (saved,) = modules_setup() + try: + yield + finally: + modules_cleanup(saved) + + +def mock_register_at_fork(func): + # bpo-30599: Mock os.register_at_fork() when importing the random module, + # since this function doesn't allow to unregister callbacks and would leak + # memory. + from unittest import mock + return mock.patch('os.register_at_fork', create=True)(func) + + @contextlib.contextmanager def ready_to_import(name=None, source=""): from test.support import script_helper diff --git a/Misc/NEWS.d/next/Tests/2024-03-06-11-00-36.gh-issue-116307.Uij0t_.rst b/Misc/NEWS.d/next/Tests/2024-03-06-11-00-36.gh-issue-116307.Uij0t_.rst new file mode 100644 index 000000000000..93b62d1822b7 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2024-03-06-11-00-36.gh-issue-116307.Uij0t_.rst @@ -0,0 +1,2 @@ +Added import helper ``isolated_modules`` as ``CleanImport`` does not remove +modules imported during the context.