diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2018-02-24 09:41:28 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2018-02-24 09:41:28 -0500 |
commit | ab1b883cb4ce7cc7a90c6e41545e0bfd1a8d7d05 (patch) | |
tree | 5941c4c99a5be22bc8f71281d99f8fd9bbe17df0 /coverage | |
parent | 6fbe4f09334060e1f89d4d9a7aab2cfae40f26d8 (diff) | |
download | python-coveragepy-git-ab1b883cb4ce7cc7a90c6e41545e0bfd1a8d7d05.tar.gz |
Refactoring to prep for more refactoring
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/control.py | 14 | ||||
-rw-r--r-- | coverage/python.py | 28 |
2 files changed, 24 insertions, 18 deletions
diff --git a/coverage/control.py b/coverage/control.py index daa00bd0..cfc00cd2 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 372347f5..5edfc54d 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)) |