Passed
Pull Request — master (#156)
by Jan
02:30
created

oval_graph.command_line_client.client_html_output   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 92
Duplicated Lines 0 %

Test Coverage

Coverage 88.14%

Importance

Changes 0
Metric Value
eloc 79
dl 0
loc 92
ccs 52
cts 59
cp 0.8814
rs 10
c 0
b 0
f 0
wmc 20

10 Methods

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