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.
This commit is contained in:
Bruno Oliveira 2024-04-13 12:03:49 -03:00 committed by Bruno Oliveira
parent f4289181cb
commit 3c6caf65eb
1 changed files with 18 additions and 2 deletions

View File

@ -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)