mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Add a reset_name argument to importlib.util.module_to_load in order to
control whether to reset the module's __name__ attribute in case a reload is being done.
This commit is contained in:
parent
028d51236a
commit
b60a43eabf
3 changed files with 30 additions and 2 deletions
|
@ -493,8 +493,14 @@ class _ModuleManager:
|
|||
|
||||
"""
|
||||
|
||||
def __init__(self, name):
|
||||
def __init__(self, name, *, reset_name=True):
|
||||
"""Prepare the context manager.
|
||||
|
||||
The reset_name argument specifies whether to unconditionally reset
|
||||
the __name__ attribute if the module is found to be a reload.
|
||||
"""
|
||||
self._name = name
|
||||
self._reset_name = reset_name
|
||||
|
||||
def __enter__(self):
|
||||
self._module = sys.modules.get(self._name)
|
||||
|
@ -508,6 +514,12 @@ class _ModuleManager:
|
|||
# (otherwise an optimization shortcut in import.c becomes wrong)
|
||||
self._module.__initializing__ = True
|
||||
sys.modules[self._name] = self._module
|
||||
elif self._reset_name:
|
||||
try:
|
||||
self._module.__name__ = self._name
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
return self._module
|
||||
|
||||
def __exit__(self, *args):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue