Some minor cleanups to private runpy code and docstrings

This commit is contained in:
Nick Coghlan 2009-11-07 08:15:01 +00:00
parent 2733d88dc2
commit e471b9b400
1 changed files with 13 additions and 7 deletions

View File

@ -24,7 +24,7 @@ __all__ = [
def _run_code(code, run_globals, init_globals=None, def _run_code(code, run_globals, init_globals=None,
mod_name=None, mod_fname=None, mod_name=None, mod_fname=None,
mod_loader=None, pkg_name=None): mod_loader=None, pkg_name=None):
"""Helper for _run_module_code""" """Helper to run code in nominated namespace"""
if init_globals is not None: if init_globals is not None:
run_globals.update(init_globals) run_globals.update(init_globals)
run_globals.update(__name__ = mod_name, run_globals.update(__name__ = mod_name,
@ -37,7 +37,7 @@ def _run_code(code, run_globals, init_globals=None,
def _run_module_code(code, init_globals=None, def _run_module_code(code, init_globals=None,
mod_name=None, mod_fname=None, mod_name=None, mod_fname=None,
mod_loader=None, pkg_name=None): mod_loader=None, pkg_name=None):
"""Helper for run_module""" """Helper to run code in new namespace with sys modified"""
# Set up the top level namespace dictionary # Set up the top level namespace dictionary
temp_module = imp.new_module(mod_name) temp_module = imp.new_module(mod_name)
mod_globals = temp_module.__dict__ mod_globals = temp_module.__dict__
@ -81,7 +81,7 @@ def _get_module_details(mod_name):
raise ImportError("No module named %s" % mod_name) raise ImportError("No module named %s" % mod_name)
if loader.is_package(mod_name): if loader.is_package(mod_name):
if mod_name == "__main__" or mod_name.endswith(".__main__"): if mod_name == "__main__" or mod_name.endswith(".__main__"):
raise ImportError(("Cannot use package as __main__ module")) raise ImportError("Cannot use package as __main__ module")
try: try:
pkg_main_name = mod_name + ".__main__" pkg_main_name = mod_name + ".__main__"
return _get_module_details(pkg_main_name) return _get_module_details(pkg_main_name)
@ -99,19 +99,25 @@ def _get_module_details(mod_name):
# (Current thoughts: don't repeat the mistake that lead to its # (Current thoughts: don't repeat the mistake that lead to its
# creation when run_module() no longer met the needs of # creation when run_module() no longer met the needs of
# mainmodule.c, but couldn't be changed because it was public) # mainmodule.c, but couldn't be changed because it was public)
def _run_module_as_main(mod_name, set_argv0=True): def _run_module_as_main(mod_name, alter_argv=True):
"""Runs the designated module in the __main__ namespace """Runs the designated module in the __main__ namespace
These __*__ magic variables will be overwritten: Note that the executed module will have full access to the
__main__ namespace. If this is not desirable, the run_module()
function sbould be used to run the module code in a fresh namespace.
At the very least, these variables in __main__ will be overwritten:
__name__
__file__ __file__
__loader__ __loader__
__package__
""" """
try: try:
mod_name, loader, code, fname = _get_module_details(mod_name) mod_name, loader, code, fname = _get_module_details(mod_name)
except ImportError as exc: except ImportError as exc:
# Try to provide a good error message # Try to provide a good error message
# for directories, zip files and the -m switch # for directories, zip files and the -m switch
if set_argv0: if alter_argv:
# For -m switch, just display the exception # For -m switch, just display the exception
info = str(exc) info = str(exc)
else: else:
@ -122,7 +128,7 @@ def _run_module_as_main(mod_name, set_argv0=True):
sys.exit(msg) sys.exit(msg)
pkg_name = mod_name.rpartition('.')[0] pkg_name = mod_name.rpartition('.')[0]
main_globals = sys.modules["__main__"].__dict__ main_globals = sys.modules["__main__"].__dict__
if set_argv0: if alter_argv:
sys.argv[0] = fname sys.argv[0] = fname
return _run_code(code, main_globals, None, return _run_code(code, main_globals, None,
"__main__", fname, loader, pkg_name) "__main__", fname, loader, pkg_name)