diff options
author | Buck Golemon <buck@yelp.com> | 2014-11-14 16:33:41 -0800 |
---|---|---|
committer | Buck Golemon <buck@yelp.com> | 2014-11-14 16:33:41 -0800 |
commit | 148a2291e1e7b04eecaa15c90b125cc8199d7974 (patch) | |
tree | ce099dadc9f6641dd4a2d59cd619a1404cdc8c6a | |
parent | 7ca11054c5b0f91bd77c16923ec443ccee6f2dd9 (diff) | |
download | python-coveragepy-git-148a2291e1e7b04eecaa15c90b125cc8199d7974.tar.gz |
they changed the way __loader__ looks in 3.3
--HG--
branch : __main__-support
extra : amend_source : 7abd8465667b4bd4b3eeac24391c27c68edf9a95
-rw-r--r-- | coverage/control.py | 11 | ||||
-rw-r--r-- | coverage/execfile.py | 8 | ||||
-rw-r--r-- | tests/try_execfile.py | 7 |
3 files changed, 20 insertions, 6 deletions
diff --git a/coverage/control.py b/coverage/control.py index 47e5b508..7a85103b 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -322,9 +322,14 @@ class Coverage(object): return dunder_name loader = module_namespace.get('__loader__', None) - if hasattr(loader, 'fullname') and isinstance(loader.fullname, str): - # module loaded via runpy -m - return loader.fullname + for attrname in ('fullname', 'name'): # attribute renamed in py3.2 + if ( + hasattr(loader, 'fullname') and + isinstance(loader.fullname, str) and + loader.fullname != '__main__' + ): + # module loaded via runpy -m + return loader.fullname # script as first argument to python cli inspectedname = inspect.getmodulename(filename) diff --git a/coverage/execfile.py b/coverage/execfile.py index f03713ec..4b5f3af4 100644 --- a/coverage/execfile.py +++ b/coverage/execfile.py @@ -7,6 +7,12 @@ 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. @@ -104,7 +110,7 @@ def run_python_module(modulename, args): run_python_file(pathname, args, package=packagename, modulename=modulename) -def run_python_file(filename, args, package=None, modulename=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. diff --git a/tests/try_execfile.py b/tests/try_execfile.py index fd430e6b..ee5bae5c 100644 --- a/tests/try_execfile.py +++ b/tests/try_execfile.py @@ -54,14 +54,17 @@ def my_function(a): FN_VAL = my_function("fooey") +loader = globals().get('__loader__') +fullname = getattr(loader, 'fullname', None) or getattr(loader, 'name', None) + globals_to_check = { '__name__': __name__, '__file__': __file__, '__doc__': __doc__, '__builtins__.has_open': hasattr(__builtins__, 'open'), '__builtins__.dir': dir(__builtins__), - '__loader__ exists': '__loader__' in globals(), - '__loader__.fullname': getattr(globals().get('__loader__', None), 'fullname', None), + '__loader__ exists': loader is not None, + '__loader__.fullname': fullname, '__package__': __package__, 'DATA': DATA, 'FN_VAL': FN_VAL, |