diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-01 12:16:30 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-01 12:16:30 -0500 |
commit | ea231af0bbb3aa1eed780ece6c567857845d7c96 (patch) | |
tree | 5eacdef7a96b5a3063b75009346a4de8cc99ec52 /coverage/control.py | |
parent | b88a6b2d44ef513503547fe2908fb41d298e87ec (diff) | |
download | python-coveragepy-git-ea231af0bbb3aa1eed780ece6c567857845d7c96.tar.gz |
Move code_unit_factory into Coverage
Diffstat (limited to 'coverage/control.py')
-rw-r--r-- | coverage/control.py | 59 |
1 files changed, 49 insertions, 10 deletions
diff --git a/coverage/control.py b/coverage/control.py index 95592508..0ca1e95c 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -10,7 +10,7 @@ import sys from coverage.annotate import AnnotateReporter from coverage.backward import string_class, iitems -from coverage.codeunit import code_unit_factory, CodeUnit, PythonCodeUnit +from coverage.codeunit import CodeUnit, PythonCodeUnit from coverage.collector import Collector from coverage.config import CoverageConfig from coverage.data import CoverageData @@ -750,20 +750,59 @@ class Coverage(object): Returns an `Analysis` object. """ - def get_plugin(filename): - """For code_unit_factory to use to find the plugin for a file.""" - plugin = None - plugin_name = self.data.plugin_data().get(filename) - if plugin_name: - plugin = self.plugins.get(plugin_name) - return plugin - self._harvest_data() if not isinstance(it, CodeUnit): - it = code_unit_factory(it, self.file_locator, get_plugin) + it = self._get_file_reporter(it) return Analysis(self, it) + def _get_file_reporter(self, morf): + """Get a FileReporter for a module or filename.""" + plugin = None + + if isinstance(morf, string_class): + plugin_name = self.data.plugin_data().get(morf) + if plugin_name: + plugin = self.plugins.get(plugin_name) + + if plugin: + file_reporter = plugin.file_reporter(morf) + if file_reporter is None: + raise CoverageException( + "Plugin %r did not provide a file reporter for %r." % ( + plugin.plugin_name, morf + ) + ) + else: + file_reporter = PythonCodeUnit(morf, self.file_locator) + + return file_reporter + + def _get_file_reporters(self, morfs=None): + """Get a list of FileReporters for a list of modules or filenames. + + For each module or filename in `morfs`, find a FileReporter. Return + the list of FileReporters. + + If `morfs` is a single module or filename, this returns a list of one + FileReporter. If `morfs` is empty or None, then the list of all files + measured is used to find the FileReporters. + + """ + if not morfs: + morfs = self.data.measured_files() + + # Be sure we have a list. + if not isinstance(morfs, (list, tuple)): + morfs = [morfs] + + file_reporters = [] + for morf in morfs: + file_reporter = self._get_file_reporter(morf) + file_reporters.append(file_reporter) + + return file_reporters + def report( self, morfs=None, show_missing=True, ignore_errors=None, file=None, # pylint: disable=redefined-builtin |