summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBuck Golemon <buck@yelp.com>2014-11-14 16:33:41 -0800
committerBuck Golemon <buck@yelp.com>2014-11-14 16:33:41 -0800
commit148a2291e1e7b04eecaa15c90b125cc8199d7974 (patch)
treece099dadc9f6641dd4a2d59cd619a1404cdc8c6a
parent7ca11054c5b0f91bd77c16923ec443ccee6f2dd9 (diff)
downloadpython-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.py11
-rw-r--r--coverage/execfile.py8
-rw-r--r--tests/try_execfile.py7
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,