1#!/usr/bin/env python3
2
3from __future__ import print_function
4import os
5from .report import Report
6from .unified_format_parser import UnifiedFormatParser
7
8
9class Debug:
10    def __init__(self, args):
11        self.args = args
12
13    def __get_debug_out_filename(self, path, type):
14        # type: (str, str) -> str
15        # Take basename
16        file_name = os.path.basename(path)
17        # Split in name and extension
18        file_name = os.path.splitext(file_name)
19        if self.args.out != "stdout":
20            out_folder = os.path.dirname(self.args.out)
21        else:
22            out_folder = "./"
23        dbg_report_path = out_folder + file_name[0] + type + file_name[1]
24
25        return dbg_report_path
26
27    def __debug_print_report(self, report, type):
28        # type: (Report, str) -> None
29        report_name = self.__get_debug_out_filename(report.get_report_path(),
30                                                    type)
31        try:
32            with open(report_name, "wt") as outfile:
33                print(report, end="", file=outfile)
34        except OSError as e:
35            print("ERROR: Issue opening file {}: {}".format(report_name, e))
36
37    def debug_print_parsed_report(self, report):
38        # type: (Report) -> None
39        if not self.args.debug:
40            return
41        self.__debug_print_report(report, ".parsed")
42
43    def debug_print_patched_report(self, report):
44        # type: (Report) -> None
45        if not self.args.debug:
46            return
47        # The patched report contains already .patched in its name
48        self.__debug_print_report(report, "")
49
50    def debug_print_parsed_diff(self, diff):
51        # type: (UnifiedFormatParser) -> None
52        if not self.args.debug:
53            return
54        diff_filename = diff.get_diff_path()
55        out_pathname = self.__get_debug_out_filename(diff_filename, ".parsed")
56        try:
57            with open(out_pathname, "wt") as outfile:
58                for change_obj in diff.get_change_sets().values():
59                    print(change_obj, end="", file=outfile)
60        except OSError as e:
61            print("ERROR: Issue opening file {}: {}".format(out_pathname, e))
62