diff --git a/Lib/modulefinder.py b/Lib/modulefinder.py index cc5b8cc6911..b778e6094dd 100644 --- a/Lib/modulefinder.py +++ b/Lib/modulefinder.py @@ -568,11 +568,12 @@ class ModuleFinder: if isinstance(consts[i], type(co)): consts[i] = self.replace_paths_in_code(consts[i]) - return types.CodeType(co.co_argcount, co.co_nlocals, co.co_stacksize, - co.co_flags, co.co_code, tuple(consts), co.co_names, - co.co_varnames, new_filename, co.co_name, - co.co_firstlineno, co.co_lnotab, - co.co_freevars, co.co_cellvars) + return types.CodeType(co.co_argcount, co.co_kwonlyargcount, + co.co_nlocals, co.co_stacksize, co.co_flags, + co.co_code, tuple(consts), co.co_names, + co.co_varnames, new_filename, co.co_name, + co.co_firstlineno, co.co_lnotab, co.co_freevars, + co.co_cellvars) def test(): diff --git a/Lib/test/test_modulefinder.py b/Lib/test/test_modulefinder.py index ed30d6fe3a4..b5fdcc80c0b 100644 --- a/Lib/test/test_modulefinder.py +++ b/Lib/test/test_modulefinder.py @@ -245,11 +245,12 @@ def create_package(source): class ModuleFinderTest(unittest.TestCase): - def _do_test(self, info, report=False): + def _do_test(self, info, report=False, debug=0, replace_paths=[]): import_this, modules, missing, maybe_missing, source = info create_package(source) try: - mf = modulefinder.ModuleFinder(path=TEST_PATH) + mf = modulefinder.ModuleFinder(path=TEST_PATH, debug=debug, + replace_paths=replace_paths) mf.import_hook(import_this) if report: mf.report() @@ -308,9 +309,16 @@ class ModuleFinderTest(unittest.TestCase): os.remove(source_path) self._do_test(bytecode_test) + def test_replace_paths(self): + old_path = os.path.join(TEST_DIR, 'a', 'module.py') + new_path = os.path.join(TEST_DIR, 'a', 'spam.py') + with support.captured_stdout() as output: + self._do_test(maybe_test, debug=2, + replace_paths=[(old_path, new_path)]) + output = output.getvalue() + expected = "co_filename '%s' changed to '%s'" % (old_path, new_path) + self.assertIn(expected, output) -def test_main(): - support.run_unittest(ModuleFinderTest) if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS b/Misc/NEWS index ca703fb0bef..1b760e77fb7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -108,6 +108,9 @@ Core and Builtins Library ------- +- Issue #21707: Add missing kwonlyargcount argument to + ModuleFinder.replace_paths_in_code(). + - Issue #20639: calling Path.with_suffix('') allows removing the suffix again. Patch by July Tikhonov.