summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2018-02-24 09:41:28 -0500
committerNed Batchelder <ned@nedbatchelder.com>2018-02-24 09:41:28 -0500
commit99b07c0c7265eb5ecd8efa15f8e57ac799eb7418 (patch)
tree92cde6e076732c7ec617c356a065e3c707ee0690
parent95d2570cca83d20e7b31695ffbc61da63c7ee0e9 (diff)
downloadpython-coveragepy-99b07c0c7265eb5ecd8efa15f8e57ac799eb7418.tar.gz
Refactoring to prep for more refactoring
-rw-r--r--coverage/control.py14
-rw-r--r--coverage/python.py28
2 files changed, 24 insertions, 18 deletions
diff --git a/coverage/control.py b/coverage/control.py
index daa00bd..cfc00cd 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -30,7 +30,7 @@ from coverage.misc import CoverageException, bool_or_none, join_regex
from coverage.misc import file_be_gone, isolate_module
from coverage.plugin import FileReporter
from coverage.plugin_support import Plugins
-from coverage.python import PythonFileReporter, source_for_file
+from coverage.python import PythonFileReporter, source_for_file, source_for_morf
from coverage.results import Analysis, Numbers
from coverage.summary import SummaryReporter
from coverage.xmlreport import XmlReporter
@@ -344,11 +344,6 @@ class Coverage(object):
for mod in [contracts, six]:
self.cover_paths.append(self._canonical_path(mod))
- # Set the reporting precision.
- Numbers.set_precision(self.config.precision)
-
- atexit.register(self._atexit)
-
# Create the matchers we need for _should_trace
if self.source or self.source_pkgs:
self.source_match = TreeMatcher(self.source)
@@ -363,6 +358,11 @@ class Coverage(object):
if self.omit:
self.omit_match = FnmatchMatcher(self.omit)
+ # Set the reporting precision.
+ Numbers.set_precision(self.config.precision)
+
+ atexit.register(self._atexit)
+
# The user may want to debug things, show info if desired.
self._write_startup_debug()
@@ -394,7 +394,7 @@ class Coverage(object):
case return its enclosing directory.
"""
- morf_path = PythonFileReporter(morf, self).filename
+ morf_path = canonical_filename(source_for_morf(morf))
if morf_path.endswith("__init__.py") or directory:
morf_path = os.path.split(morf_path)[0]
return morf_path
diff --git a/coverage/python.py b/coverage/python.py
index 372347f..5edfc54 100644
--- a/coverage/python.py
+++ b/coverage/python.py
@@ -97,7 +97,7 @@ def get_zip_bytes(filename):
def source_for_file(filename):
- """Return the source file for `filename`.
+ """Return the source filename for `filename`.
Given a file name being traced, return the best guess as to the source
file to attribute it to.
@@ -129,22 +129,28 @@ def source_for_file(filename):
return filename
+def source_for_morf(morf):
+ """Get the source filename for the module-or-file `morf`."""
+ if hasattr(morf, '__file__'):
+ filename = morf.__file__
+ elif isinstance(morf, types.ModuleType):
+ # A module should have had .__file__, otherwise we can't use it.
+ # This could be a PEP-420 namespace package.
+ raise CoverageException("Module {0} has no file".format(morf))
+ else:
+ filename = morf
+
+ filename = source_for_file(files.unicode_filename(filename))
+ return filename
+
+
class PythonFileReporter(FileReporter):
"""Report support for a Python file."""
def __init__(self, morf, coverage=None):
self.coverage = coverage
- if hasattr(morf, '__file__'):
- filename = morf.__file__
- elif isinstance(morf, types.ModuleType):
- # A module should have had .__file__, otherwise we can't use it.
- # This could be a PEP-420 namespace package.
- raise CoverageException("Module {0} has no file".format(morf))
- else:
- filename = morf
-
- filename = source_for_file(files.unicode_filename(filename))
+ filename = source_for_morf(morf)
super(PythonFileReporter, self).__init__(files.canonical_filename(filename))