diff -r 04e5dfbd3f3d -r 3586ebd9fac8 DebugClients/Python/coverage/report.py --- a/DebugClients/Python/coverage/report.py Sat Jul 23 13:33:54 2016 +0200 +++ b/DebugClients/Python/coverage/report.py Sun Jul 24 12:01:01 2016 +0200 @@ -4,9 +4,12 @@ """Reporter foundation for coverage.py.""" import os +import warnings from coverage.files import prep_patterns, FnmatchMatcher -from coverage.misc import CoverageException, NoSource, NotPython +from coverage.misc import CoverageException, NoSource, NotPython, isolate_module + +os = isolate_module(os) class Reporter(object): @@ -22,40 +25,45 @@ self.coverage = coverage self.config = config - # The FileReporters to report on. Set by find_file_reporters. - self.file_reporters = [] - # The directory into which to place the report, used by some derived # classes. self.directory = None + # Our method find_file_reporters used to set an attribute that other + # code could read. That's been refactored away, but some third parties + # were using that attribute. We'll continue to support it in a noisy + # way for now. + self._file_reporters = [] + + @property + def file_reporters(self): + """Keep .file_reporters working for private-grabbing tools.""" + warnings.warn( + "Report.file_reporters will no longer be available in Coverage.py 4.2", + DeprecationWarning, + ) + return self._file_reporters + def find_file_reporters(self, morfs): """Find the FileReporters we'll report on. `morfs` is a list of modules or file names. + Returns a list of FileReporters. + """ - self.file_reporters = self.coverage._get_file_reporters(morfs) + reporters = self.coverage._get_file_reporters(morfs) if self.config.include: - patterns = prep_patterns(self.config.include) - matcher = FnmatchMatcher(patterns) - filtered = [] - for fr in self.file_reporters: - if matcher.match(fr.filename): - filtered.append(fr) - self.file_reporters = filtered + matcher = FnmatchMatcher(prep_patterns(self.config.include)) + reporters = [fr for fr in reporters if matcher.match(fr.filename)] if self.config.omit: - patterns = prep_patterns(self.config.omit) - matcher = FnmatchMatcher(patterns) - filtered = [] - for fr in self.file_reporters: - if not matcher.match(fr.filename): - filtered.append(fr) - self.file_reporters = filtered + matcher = FnmatchMatcher(prep_patterns(self.config.omit)) + reporters = [fr for fr in reporters if not matcher.match(fr.filename)] - self.file_reporters.sort() + self._file_reporters = sorted(reporters) + return self._file_reporters def report_files(self, report_fn, morfs, directory=None): """Run a reporting function on a number of morfs. @@ -69,16 +77,16 @@ `analysis` is the `Analysis` for the morf. """ - self.find_file_reporters(morfs) + file_reporters = self.find_file_reporters(morfs) - if not self.file_reporters: + if not file_reporters: raise CoverageException("No data to report.") self.directory = directory if self.directory and not os.path.exists(self.directory): os.makedirs(self.directory) - for fr in self.file_reporters: + for fr in file_reporters: try: report_fn(fr, self.coverage._analyze(fr)) except NoSource: