diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-24 21:30:04 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2014-11-24 21:30:04 -0500 |
commit | 2b369aa719d2a4b4e755c9030f1d0cc1dfeeeacb (patch) | |
tree | 361d0a995b5360a0170aff07cc87aa5afbc7562a /coverage/execfile.py | |
parent | 8fa9db9f86de0b7cbce45e0a5fe87e38e47212b7 (diff) | |
parent | b3ccb75241566c1e1a814ae99a84637fd0ac2b44 (diff) | |
download | python-coveragepy-git-2b369aa719d2a4b4e755c9030f1d0cc1dfeeeacb.tar.gz |
Merged pull request 42, fixing issue #328.
Diffstat (limited to 'coverage/execfile.py')
-rw-r--r-- | coverage/execfile.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/coverage/execfile.py b/coverage/execfile.py index e7e20715..8965d207 100644 --- a/coverage/execfile.py +++ b/coverage/execfile.py @@ -7,6 +7,21 @@ from coverage.backward import PYC_MAGIC_NUMBER, imp, importlib_util_find_spec from coverage.misc import ExceptionDuringRun, NoCode, NoSource +if sys.version_info >= (3, 3): + DEFAULT_FULLNAME = '__main__' +else: + DEFAULT_FULLNAME = None + + +class DummyLoader(object): + """A shim for the pep302 __loader__, emulating pkgutil.ImpLoader. + + Currently only implements the .fullname attribute + """ + def __init__(self, fullname, *args): + self.fullname = fullname + + if importlib_util_find_spec: def find_module(modulename): """Find the module named `modulename`. @@ -91,10 +106,10 @@ def run_python_module(modulename, args): pathname = os.path.abspath(pathname) args[0] = pathname - run_python_file(pathname, args, package=packagename) + run_python_file(pathname, args, package=packagename, modulename=modulename) -def run_python_file(filename, args, package=None): +def run_python_file(filename, args, package=None, modulename=DEFAULT_FULLNAME): """Run a python file as if it were the main program on the command line. `filename` is the path to the file to execute, it need not be a .py file. @@ -110,6 +125,9 @@ def run_python_file(filename, args, package=None): main_mod.__file__ = filename if package: main_mod.__package__ = package + if modulename: + main_mod.__loader__ = DummyLoader(modulename) + main_mod.__builtins__ = BUILTINS # Set sys.argv properly. |