DebugClients/Python/coverage/report.py

changeset 0
de9c2efb9d02
child 31
744cd0b4b8cd
diff -r 000000000000 -r de9c2efb9d02 DebugClients/Python/coverage/report.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DebugClients/Python/coverage/report.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,61 @@
+"""Reporter foundation for Coverage."""
+
+import os
+from codeunit import code_unit_factory
+
+class Reporter(object):
+    """A base class for all reporters."""
+    
+    def __init__(self, coverage, ignore_errors=False):
+        """Create a reporter.
+        
+        `coverage` is the coverage instance. `ignore_errors` controls how
+        skittish the reporter will be during file processing.
+
+        """
+        self.coverage = coverage
+        self.ignore_errors = ignore_errors
+        
+        # The code units to report on.  Set by find_code_units.
+        self.code_units = []
+        
+        # The directory into which to place the report, used by some derived
+        # classes.
+        self.directory = None
+
+    def find_code_units(self, morfs, omit_prefixes):
+        """Find the code units we'll report on.
+        
+        `morfs` is a list of modules or filenames. `omit_prefixes` is a list
+        of prefixes to leave out of the list.
+        
+        """
+        morfs = morfs or self.coverage.data.executed_files()
+        self.code_units = code_unit_factory(
+                            morfs, self.coverage.file_locator, omit_prefixes)
+        self.code_units.sort()
+
+    def report_files(self, report_fn, morfs, directory=None,
+                        omit_prefixes=None):
+        """Run a reporting function on a number of morfs.
+        
+        `report_fn` is called for each relative morf in `morfs`.
+        
+        """
+        self.find_code_units(morfs, omit_prefixes)
+
+        self.directory = directory
+        if self.directory and not os.path.exists(self.directory):
+            os.makedirs(self.directory)
+
+        for cu in self.code_units:
+            try:
+                if not cu.relative:
+                    continue
+                statements, excluded, missing, _ = self.coverage._analyze(cu)
+                report_fn(cu, statements, excluded, missing)
+            except KeyboardInterrupt:
+                raise
+            except:
+                if not self.ignore_errors:
+                    raise

eric ide

mercurial