From 3c6caf65ebdaa843a8b122e0e2a263618c3317a3 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Sat, 13 Apr 2024 12:03:49 -0300 Subject: [PATCH] Use _import_module_using_spec to import parent modules Seems this is the right thing to do, as we will then also consider the parent modules for rewriting. --- src/_pytest/pathlib.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/_pytest/pathlib.py b/src/_pytest/pathlib.py index e1a336719..4cda4501a 100644 --- a/src/_pytest/pathlib.py +++ b/src/_pytest/pathlib.py @@ -641,8 +641,24 @@ def _import_module_using_spec( parent_module_name, _, name = module_name.rpartition(".") parent_module: Optional[ModuleType] = sys.modules.get(parent_module_name) if parent_module is None and parent_module_name: - with contextlib.suppress(ModuleNotFoundError, ImportWarning): - parent_module = importlib.import_module(parent_module_name) + # Find the directory of this module's parent. + parent_dir = ( + module_path.parent.parent + if module_path.name == "__init__.py" + else module_path.parent + ) + # Consider the parent module path as its __init__.py file, if it has one. + parent_module_path = ( + parent_dir / "__init__.py" + if (parent_dir / "__init__.py").is_file() + else parent_dir + ) + parent_module = _import_module_using_spec( + parent_module_name, + parent_module_path, + parent_dir, + insert_modules=insert_modules, + ) # Find spec and import this module. mod = importlib.util.module_from_spec(spec)