diff --git a/astroid/interpreter/_import/spec.py b/astroid/interpreter/_import/spec.py index 7e51cc10e..e28f1d0c3 100644 --- a/astroid/interpreter/_import/spec.py +++ b/astroid/interpreter/_import/spec.py @@ -325,6 +325,11 @@ def find_module( submodule_search_locations=path, ) + def contribute_to_path( + self, spec: ModuleSpec, processed: list[str] + ) -> Sequence[str] | None: + return spec.submodule_search_locations + class PathSpecFinder(Finder): """Finder based on importlib.machinery.PathFinder.""" diff --git a/tests/test_manager.py b/tests/test_manager.py index 9a7bbdb7e..1b92ce4b4 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -277,6 +277,17 @@ def test_ast_from_module_name_pyz(self) -> None: finally: os.remove(linked_file_name) + def test_ast_from_module_name_pyz_with_submodule(self) -> None: + with self._restore_package_cache(): + archive_path = os.path.join(resources.RESOURCE_PATH, "x.zip") + sys.path.insert(0, archive_path) + module = self.manager.ast_from_module_name("xxx.test") + self.assertEqual(module.name, "xxx.test") + end = os.path.join(archive_path, "xxx", "test") + self.assertTrue( + module.file.endswith(end), f"{module.file} doesn't endswith {end}" + ) + def test_zip_import_data(self) -> None: """Check if zip_import_data works.""" with self._restore_package_cache(): diff --git a/tests/testdata/python3/data/x.zip b/tests/testdata/python3/data/x.zip new file mode 100644 index 000000000..4f663fb34 Binary files /dev/null and b/tests/testdata/python3/data/x.zip differ