Pārlūkot izejas kodu

changed all report format functions to return strings - file handling is now done outside - if no path is given the result is printed to stdout

prozessorkern 1 gadu atpakaļ
vecāks
revīzija
640e05eaa4
1 mainītis faili ar 62 papildinājumiem un 63 dzēšanām
  1. 62 63
      metrixpp/ext/std/tools/report.py

+ 62 - 63
metrixpp/ext/std/tools/report.py

@@ -6,6 +6,7 @@
 #
 
 import logging
+import io
 import os
 import pytablewriter
 
@@ -18,8 +19,7 @@ class Plugin(api.Plugin, api.IConfigurable, api.IRunable):
 
     def declare_configuration(self, parser):
         self.parser = parser
-        parser.add_option("--output-dir", "--od", default='./metrixpp/',
-                           help="Set the output folder. [default: %default].")
+        parser.add_option("--output-dir", "--od", help="Set the output folder.")
         parser.add_option("--format", "--ft", default='txt', choices=['txt', 'doxygen'],
                           help="Format of the output data. "
                           "Possible values are 'txt' or 'doxygen' [default: %default]")
@@ -106,78 +106,70 @@ class Plugin(api.Plugin, api.IConfigurable, api.IRunable):
 
         return report_text
 
-    def create_doxygen_report(self, paths, output_dir, overview_data, data):
-        exit_code = 1
+    def create_doxygen_report(self, paths, overview_data, data):
+        result_text = ""
+        result_text += "/* this file is autogenerated by metrix++ - changes will be overwritten */\n"
+        result_text += "/*!\n"
 
-        if output_dir:
-            os.makedirs(output_dir, exist_ok=True)
-            with open(os.path.join(output_dir, "metrixpp.dox"), mode="w+") as file:
-                file.write("/* this file is autogenerated by metrix++ - changes will be overwritten */\n")
-                file.write("/*!\n")
+        result_text += "\\page metrix_overview Metrix overview\n\n"
 
-                file.write("\\page metrix_overview Metrix overview\n\n")
+        result_text += "\\section metrix_sec Metrix Warnings\n\n"
+        result_text += "Metrix Limits exceeded {} times.\n\n".format(len(overview_data["warnings"]))
 
-                file.write("\\section metrix_sec Metrix Warnings\n\n")
-                file.write("Metrix Limits exceeded {} times.\n\n".format(len(overview_data["warnings"])))
-
-                if len(overview_data["warnings"]) > 0:
-                    file.write("Warning list: \\ref metrix_warnings\n\n")
-
-                for file_data in overview_data["matrix"]:
-                    file_data[0] = str(file_data[0]).replace("\\", "/")
+        if len(overview_data["warnings"]) > 0:
+            result_text += "Warning list: \\ref metrix_warnings\n\n"
 
-                writer = pytablewriter.MarkdownTableWriter()
-                writer.table_name = "metrix overview"
-                writer.headers = overview_data["fields"]
-                writer.value_matrix = overview_data["matrix"]
-                writer.margin = 1
-                writer.stream = file
-                writer.write_table()
+        for file_data in overview_data["matrix"]:
+            file_data[0] = str(file_data[0]).replace("\\", "/")
 
-                file.write("\n\n")
+        writer = pytablewriter.MarkdownTableWriter()
+        writer.table_name = "metrix overview"
+        writer.headers = overview_data["fields"]
+        writer.value_matrix = overview_data["matrix"]
+        writer.margin = 1
+        writer.stream = io.StringIO()
+        writer.write_table()
 
-                for path in paths:
+        result_text += writer.stream.getvalue() + "\n\n"
 
-                    file.write("\\file {}\n\n".format(path))
+        for path in paths:
 
-                    writer = pytablewriter.MarkdownTableWriter()
-                    writer.table_name = "metrix"
-                    writer.headers = data[path]["file_fields"]
-                    writer.value_matrix = data[path]["file_matrix"]
-                    writer.margin = 1
-                    writer.stream = file
-                    writer.write_table()
+            result_text += "\\file {}\n\n".format(path)
 
-                    file.write("\n")
+            writer = pytablewriter.MarkdownTableWriter()
+            writer.table_name = "metrix"
+            writer.headers = data[path]["file_fields"]
+            writer.value_matrix = data[path]["file_matrix"]
+            writer.margin = 1
+            writer.stream = io.StringIO()
+            writer.write_table()
 
-                    for region in data[path]["region_matrix"]:
-                        if region[0] != "-" and region[0] != "__global__":
-                            region[0] = "\\ref " + region[0]
+            result_text += writer.stream.getvalue() + "\n"
 
-                    writer = pytablewriter.MarkdownTableWriter()
-                    writer.table_name = "region metrix"
-                    writer.headers = data[path]["region_fields"]
-                    writer.value_matrix = data[path]["region_matrix"]
-                    writer.margin = 1
-                    writer.stream = file
-                    writer.write_table()
+            for region in data[path]["region_matrix"]:
+                if region[0] != "-" and region[0] != "__global__":
+                    region[0] = "\\ref " + region[0]
 
-                    file.write("\n")
+            writer = pytablewriter.MarkdownTableWriter()
+            writer.table_name = "region metrix"
+            writer.headers = data[path]["region_fields"]
+            writer.value_matrix = data[path]["region_matrix"]
+            writer.margin = 1
+            writer.stream = io.StringIO()
+            writer.write_table()
 
-                    # add warnings as list items
-                    for warning in data[path]["warnings"]:
-                        warning_text = self._get_warning_text(warning)
-                        file.write("\\xrefitem metrix_warnings \"Metrix Warning\" \"Metrix Warnings\" {}\n".format(warning_text))
+            result_text += writer.stream.getvalue() + "\n"
 
+            # add warnings as list items
+            for warning in data[path]["warnings"]:
+                warning_text = self._get_warning_text(warning)
+                result_text += "\\xrefitem metrix_warnings \"Metrix Warning\" \"Metrix Warnings\" {}\n".format(warning_text)
 
-                    file.write("\n\n")
+            result_text += "\n\n"
 
-                file.write("*/\n")
-                exit_code = 0
-        else:
-            logging.error("no output directory set")
+        result_text += "*/\n"
 
-        return exit_code
+        return result_text
 
     def run(self, args):
         exit_code = 0
@@ -279,12 +271,19 @@ class Plugin(api.Plugin, api.IConfigurable, api.IRunable):
                                                  data)
             filename = "metrixpp.txt"
         elif self.out_format == "doxygen":
-            exit_code = self.create_doxygen_report(paths,
-                                                   self.out_dir,
-                                                   overview_data,
-                                                   data)
+            result_text = self.create_doxygen_report(paths,
+                                                     overview_data,
+                                                     data)
+            filename = "metrixpp.dox"
         else:
             logging.error("unknown or no output format set")
-            exit_code = 1
+            return 1
+
+        if self.out_dir:
+            os.makedirs(self.out_dir, exist_ok=True)
+            with open(os.path.join(self.out_dir, filename), "w+") as result_file:
+                result_file.write(result_text)
+        else:
+            print(result_text)
 
-        return exit_code
+        return 0