DebugClients/Python/coverage/report.py

changeset 5051
3586ebd9fac8
parent 4491
0d8612e24fef
--- 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:

eric ide

mercurial