Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Lib/importlib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ def import_module(name, package=None):
if character != '.':
break
level += 1
return _bootstrap._gcd_import(name[level:], package, level)
module = _bootstrap._gcd_import(name[level:], package, level)
return module


_RELOADING = {}
Expand Down
4 changes: 4 additions & 0 deletions Lib/importlib/_bootstrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -1395,6 +1395,10 @@ def _gcd_import(name, package=None, level=0):
_sanity_check(name, package, level)
if level > 0:
name = _resolve_name(name, package, level)
module = sys.modules.get(name, _NEEDS_LOADING)
if (module is _NEEDS_LOADING or
getattr(getattr(module, "__spec__", None), "_initializing", False)):
Comment thread
vstinner marked this conversation as resolved.
Outdated
sys.audit("import", name, None, sys.path, sys.meta_path, sys.path_hooks)
return _find_and_load(name, _gcd_import)


Expand Down
20 changes: 20 additions & 0 deletions Lib/test/audit-tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,26 @@ def hook(event, args):
assertEqual(event_script_path, tmp_file.name)
assertEqual(remote_event_script_path, tmp_file.name)

def test_import_module():
Comment thread
lisroach marked this conversation as resolved.
import importlib

with TestHook() as hook:
importlib.import_module("importlib") # already imported, won't get logged
importlib.import_module("email") # standard library module
importlib.import_module("pythoninfo") # random module
importlib.import_module(".test_importlib.abc", "test") # relative import

actual = [a[0] for e, a in hook.seen if e == "import"]
assertSequenceEqual(
[
"email",
"pythoninfo",
"test.test_importlib.abc",
"test.test_importlib"
],
actual,
)

if __name__ == "__main__":
from test.support import suppress_msvcrt_asserts

Expand Down
3 changes: 3 additions & 0 deletions Lib/test/test_audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -331,5 +331,8 @@ def test_sys_remote_exec(self):
if returncode:
self.fail(stderr)

def test_import_module(self):
self.do_test("test_import_module")

if __name__ == "__main__":
unittest.main()
Loading