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:
Brett Cannon 2013-05-31 18:11:17 -04:00
parent 028d51236a
commit b60a43eabf
3 changed files with 30 additions and 2 deletions

View file

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