Correctly cleanup sys.modules after executing runpy relative import
tests Restore Python 2.4 ImportError when attempting to execute a package (as imports cannot be guaranteed to work properly if you try it)
This commit is contained in:
parent
f17a2e4f87
commit
ae21fc6d1f
|
@ -84,10 +84,13 @@ def run_module(mod_name, init_globals=None,
|
|||
"""
|
||||
loader = get_loader(mod_name)
|
||||
if loader is None:
|
||||
raise ImportError("No module named " + mod_name)
|
||||
raise ImportError("No module named %s" % mod_name)
|
||||
if loader.is_package(mod_name):
|
||||
raise ImportError(("%s is a package and cannot " +
|
||||
"be directly executed") % mod_name)
|
||||
code = loader.get_code(mod_name)
|
||||
if code is None:
|
||||
raise ImportError("No code object available for " + mod_name)
|
||||
raise ImportError("No code object available for %s" % mod_name)
|
||||
filename = _get_filename(loader, mod_name)
|
||||
if run_name is None:
|
||||
run_name = mod_name
|
||||
|
|
|
@ -77,12 +77,16 @@ class RunModuleTest(unittest.TestCase):
|
|||
self.fail("Expected import error for " + mod_name)
|
||||
|
||||
def test_invalid_names(self):
|
||||
# Builtin module
|
||||
self.expect_import_error("sys")
|
||||
# Non-existent modules
|
||||
self.expect_import_error("sys.imp.eric")
|
||||
self.expect_import_error("os.path.half")
|
||||
self.expect_import_error("a.bee")
|
||||
self.expect_import_error(".howard")
|
||||
self.expect_import_error("..eaten")
|
||||
# Package
|
||||
self.expect_import_error("logging")
|
||||
|
||||
def test_library_module(self):
|
||||
run_module("runpy")
|
||||
|
@ -115,13 +119,9 @@ class RunModuleTest(unittest.TestCase):
|
|||
return pkg_dir, mod_fname, mod_name
|
||||
|
||||
def _del_pkg(self, top, depth, mod_name):
|
||||
for i in range(depth+1): # Don't forget the module itself
|
||||
parts = mod_name.rsplit(".", i)
|
||||
entry = parts[0]
|
||||
try:
|
||||
for entry in list(sys.modules):
|
||||
if entry.startswith("__runpy_pkg__"):
|
||||
del sys.modules[entry]
|
||||
except KeyError, ex:
|
||||
if verbose: print ex # Persist with cleaning up
|
||||
if verbose: print " Removed sys.modules entries"
|
||||
del sys.path[0]
|
||||
if verbose: print " Removed sys.path entry"
|
||||
|
|
Loading…
Reference in New Issue