DebugClients/Python/coverage/report.py

branch
debugger speed
changeset 5178
878ce843ca9f
parent 5051
3586ebd9fac8
child 6219
d6c795b5ce33
diff -r 8c48f5e0cd92 -r 878ce843ca9f DebugClients/Python/coverage/report.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebugClients/Python/coverage/report.py	Mon Sep 19 22:47:52 2016 +0200
@@ -0,0 +1,101 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+
+"""Reporter foundation for coverage.py."""
+
+import os
+import warnings
+
+from coverage.files import prep_patterns, FnmatchMatcher
+from coverage.misc import CoverageException, NoSource, NotPython, isolate_module
+
+os = isolate_module(os)
+
+
+class Reporter(object):
+    """A base class for all reporters."""
+
+    def __init__(self, coverage, config):
+        """Create a reporter.
+
+        `coverage` is the coverage instance. `config` is an instance  of
+        CoverageConfig, for controlling all sorts of behavior.
+
+        """
+        self.coverage = coverage
+        self.config = config
+
+        # 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.
+
+        """
+        reporters = self.coverage._get_file_reporters(morfs)
+
+        if self.config.include:
+            matcher = FnmatchMatcher(prep_patterns(self.config.include))
+            reporters = [fr for fr in reporters if matcher.match(fr.filename)]
+
+        if self.config.omit:
+            matcher = FnmatchMatcher(prep_patterns(self.config.omit))
+            reporters = [fr for fr in reporters if not matcher.match(fr.filename)]
+
+        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.
+
+        `report_fn` is called for each relative morf in `morfs`.  It is called
+        as::
+
+            report_fn(file_reporter, analysis)
+
+        where `file_reporter` is the `FileReporter` for the morf, and
+        `analysis` is the `Analysis` for the morf.
+
+        """
+        file_reporters = self.find_file_reporters(morfs)
+
+        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 file_reporters:
+            try:
+                report_fn(fr, self.coverage._analyze(fr))
+            except NoSource:
+                if not self.config.ignore_errors:
+                    raise
+            except NotPython:
+                # Only report errors for .py files, and only if we didn't
+                # explicitly suppress those errors.
+                # NotPython is only raised by PythonFileReporter, which has a
+                # should_be_python() method.
+                if fr.should_be_python() and not self.config.ignore_errors:
+                    raise

eric ide

mercurial