diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2014-07-04 22:15:20 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2014-07-04 22:15:20 -0400 |
commit | f346f85e04e44294e4c26f876e8dc75b17c4f8d7 (patch) | |
tree | fee87e2e12cd2eee6b0ae7031c9dbab9891359a5 /coverage/control.py | |
parent | 67328f5ced711292de7484e5609112d8b7009c84 (diff) | |
download | python-coveragepy-git-f346f85e04e44294e4c26f876e8dc75b17c4f8d7.tar.gz |
Crazy-ugly start to extensions for Django and Mako
--HG--
branch : django
Diffstat (limited to 'coverage/control.py')
-rw-r--r-- | coverage/control.py | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/coverage/control.py b/coverage/control.py index d6bd6092..19b68ca0 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -9,6 +9,7 @@ from coverage.collector import Collector from coverage.config import CoverageConfig from coverage.data import CoverageData from coverage.debug import DebugControl +from coverage.extension import load_extensions from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher from coverage.files import PathAliases, find_python_files, prep_patterns from coverage.html import HtmlReporter @@ -18,8 +19,6 @@ from coverage.results import Analysis, Numbers from coverage.summary import SummaryReporter from coverage.xmlreport import XmlReporter -from coverage.django import DjangoTracer - # Pypy has some unusual stuff in the "stdlib". Consider those locations # when deciding where the stdlib is. @@ -128,6 +127,10 @@ class coverage(object): # Create and configure the debugging controller. self.debug = DebugControl(self.config.debug, debug_file or sys.stderr) + # Load extensions + tracer_classes = load_extensions(self.config.extensions, "tracer") + self.tracer_extensions = [cls() for cls in tracer_classes] + self.auto_data = auto_data # _exclude_re is a dict mapping exclusion list names to compiled @@ -155,8 +158,6 @@ class coverage(object): coroutine=self.config.coroutine, ) - self.django_tracer = DjangoTracer() # should this be a class? Singleton... - # Suffixes are a bit tricky. We want to use the data suffix only when # collecting data, not when combining data. So we save it as # `self.run_suffix` now, and promote it to `self.data_suffix` if we @@ -274,11 +275,12 @@ class coverage(object): canonical = self.file_locator.canonical_filename(filename) - # DJANGO HACK - if self.django_tracer.should_trace(canonical): - disp.filename = canonical - disp.handler = self.django_tracer - return disp + # Try the extensions, see if they have an opinion about the file. + for tracer in self.tracer_extensions: + ext_disp = tracer.should_trace(canonical) + if ext_disp: + ext_disp.extension = tracer + return ext_disp # If the user specified source or include, then that's authoritative # about the outer bound of what to measure and we don't have to apply @@ -535,8 +537,10 @@ class coverage(object): if not self._measured: return + # TODO: seems like this parallel structure is getting kinda old... self.data.add_line_data(self.collector.get_line_data()) self.data.add_arc_data(self.collector.get_arc_data()) + self.data.add_extension_data(self.collector.get_extension_data()) self.collector.reset() # If there are still entries in the source_pkgs list, then we never @@ -604,7 +608,8 @@ class coverage(object): """ self._harvest_data() if not isinstance(it, CodeUnit): - it = code_unit_factory(it, self.file_locator)[0] + get_ext = self.data.extension_data().get + it = code_unit_factory(it, self.file_locator, get_ext)[0] return Analysis(self, it) @@ -776,10 +781,10 @@ class FileDisposition(object): self.original_filename = original_filename self.filename = None self.reason = "" - self.handler = None + self.extension = None def nope(self, reason): - """A helper for return a NO answer from should_trace.""" + """A helper for returning a NO answer from should_trace.""" self.reason = reason return self |