Passed
Pull Request — master (#160)
by Jan
03:42
created

ClientHtmlOutput.get_src()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 2
dl 0
loc 3
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1 1
import webbrowser
2 1
import os
3 1
import tempfile
4 1
import subprocess
5
6 1
from .client import Client
7 1
from .._builder_html_graph import BuilderHtmlGraph
8 1
from ..exceptions import NotChecked
9
10
11 1
class ClientHtmlOutput(Client):
12 1
    def __init__(self, args):
13 1
        super().__init__(args)
14 1
        self.parts = self.get_src('../parts')
15 1
        self.START_OF_FILE_NAME = 'graph-of-'
16
17 1
        self.all_in_one = self.arg.all_in_one
18 1
        self.all_rules = True if self.all_in_one else self.arg.all
19 1
        self.display_html = True if self.out is None else self.arg.display
20 1
        self.html_builder = BuilderHtmlGraph(
21
            self.parts, self.verbose, self.all_in_one)
22 1
        self.web_browsers = []
23
24 1
    def print_red_text(self, text):
25
        CRED = '\033[91m'
26
        CEND = '\033[0m'
27
        print(CRED + str(text) + CEND)
28
29 1
    def get_src(self, src):
30 1
        _dir = os.path.dirname(os.path.realpath(__file__))
31 1
        return str(os.path.join(_dir, src))
32
33 1
    def prepare_data(self, rules):
34 1
        out_src = []
35 1
        oval_tree_dict = dict()
36 1
        self._prepare_data(rules, oval_tree_dict, out_src)
37 1
        self.open_results_in_web_browser(out_src)
38 1
        return out_src
39
40 1
    def _prepare_data(self, rules, dict_oval_trees, out_src):
41 1
        for rule in rules['rules']:
42 1
            try:
43 1
                self._put_to_dict_oval_trees(dict_oval_trees, rule)
44 1
                if not self.all_in_one:
45 1
                    self._build_and_save_html(
46
                        dict_oval_trees, self._get_src_for_one_graph(
47
                            rule), dict(
48
                            rules=[rule]), out_src)
49 1
                    dict_oval_trees = {}
50 1
            except NotChecked as error:
51
                self.print_red_text(error)
52 1
        if self.all_in_one:
53
            self._build_and_save_html(
54
                dict_oval_trees, self.get_save_src(
55
                    'rules' + self.date), rules, out_src)
56
57 1
    def _build_and_save_html(self, dict_oval_trees, src, rules, out_src):
58 1
        self.html_builder.save_html(dict_oval_trees, src, rules)
59 1
        out_src.append(src)
60
61 1
    def get_save_src(self, rule):
62 1
        if self.out is not None:
63 1
            os.makedirs(self.out, exist_ok=True)
64 1
            return os.path.join(
65
                self.out,
66
                self.START_OF_FILE_NAME + rule + '.html')
67 1
        return os.path.join(
68
            tempfile.gettempdir(),
69
            self.START_OF_FILE_NAME + rule + '.html')
70
71 1
    def open_results_in_web_browser(self, paths_to_results):
72 1
        if self.display_html:
73 1
            try:
74 1
                self.web_browsers.append(subprocess.Popen(
75
                    ["firefox", *paths_to_results]))
76
            except BaseException:
77
                default_web_browser_name = webbrowser.get().name
78
                self.web_browsers.append(subprocess.Popen(
79
                    [default_web_browser_name, *paths_to_results]))
80
81 1
    def kill_web_browsers(self):
82 1
        for web_browser in self.web_browsers:
83 1
            web_browser.kill()
84
85 1
    def prepare_args_all_in_one(self):
86 1
        self.parser.add_argument(
87
            '-i',
88
            '--all-in-one',
89
            action="store_true",
90
            default=False,
91
            help="Processes all rules into one file.")
92
93 1
    def prepare_args_display(self):
94 1
        self.parser.add_argument(
95
            '-d',
96
            '--display',
97
            action="store_true",
98
            default=False,
99
            help="Enables opening a web browser with a graph, when is used --output.")
100