Passed
Push — master ( e33474...8e9b8f )
by Matěj
05:13 queued 10s
created

oval_graph.json_to_html.JsonToHtml.prepare_data()   A

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2.0116

Importance

Changes 0
Metric Value
cc 2
eloc 8
nop 2
dl 0
loc 9
ccs 6
cts 7
cp 0.8571
crap 2.0116
rs 10
c 0
b 0
f 0
1 1
import webbrowser
2 1
import json
3 1
import os
4 1
import argparse
5 1
import shutil
6 1
from datetime import datetime
7 1
import sys
8 1
import re
9
10 1
from .client import Client
11 1
from .oval_node import restore_dict_to_tree
12 1
from .converter import Converter
13 1
from .exceptions import NotChecked
14
15
16 1
class JsonToHtml(Client):
17 1
    def __init__(self, args):
18 1
        self.parser = None
19 1
        self.MESSAGES = self._get_message()
20 1
        self.arg = self.parse_arguments(args)
21 1
        self.off_webbrowser = self.arg.off_web_browser
22 1
        self.hide_passing_tests = self.arg.hide_passing_tests
23 1
        self.source_filename = self.arg.source_filename
24 1
        self.rule_name = self.arg.rule_id
25 1
        self.out = self.arg.output
26 1
        self.all_in_one = self.arg.all_in_one
27 1
        if self.all_in_one:
28
            self.all_rules = True
29
        else:
30 1
            self.all_rules = self.arg.all
31 1
        self.isatty = sys.stdout.isatty()
32 1
        self.show_failed_rules = False
33 1
        self.show_not_selected_rules = False
34 1
        self.oval_tree = None
35 1
        self.off_webbrowser = self.arg.off_web_browser
36 1
        self.json_data_file = self.get_json_data_file()
37 1
        self.parts = self.get_src('parts')
38 1
        self.START_OF_FILE_NAME = 'graph-of-'
39
40 1
    def _get_message(self):
41 1
        MESSAGES = {
42
            'description': 'Client for visualization of JSON created by command arf-to-json',
43
            '--output': 'The directory where to save output directory with files.',
44
            'source_filename': 'JSON file',
45
        }
46 1
        return MESSAGES
47
48 1
    def get_json_data_file(self):
49 1
        with open(self.source_filename, 'r') as f:
50 1
            try:
51 1
                return json.load(f)
52 1
            except Exception as error:
53 1
                raise ValueError(
54
                    'Used file "{}" is not valid json.'.format(
55
                        self.source_filename))
56
57 1
    def load_json_to_oval_tree(self, rule):
58 1
        dict_of_tree = self.json_data_file[rule]
59 1
        if isinstance(dict_of_tree, str):
60
            raise NotChecked(dict_of_tree)
61 1
        try:
62 1
            return restore_dict_to_tree(dict_of_tree)
63 1
        except Exception as error:
64 1
            raise ValueError('Data is not valid for OVAL tree.')
65
66 1
    def create_dict_of_oval_node(self, oval_node):
67 1
        converter = Converter(oval_node)
68 1
        return converter.to_JsTree_dict(self.hide_passing_tests)
69
70 1
    def load_rule_names(self):
71 1
        return self.json_data_file.keys()
72
73 1
    def get_rules_id(self):
74 1
        out = []
75 1
        for id_ in self.load_rule_names():
76 1
            out.append(id_)
77 1
        return out
78
79 1
    def get_choices(self):
80 1
        rules = self.search_rules_id()
81 1
        choices = []
82 1
        for rule in rules:
83 1
            choices.append(rule)
84 1
        return choices
85
86 1
    def search_rules_id(self):
87 1
        rules = self._get_wanted_rules_from_array_of_IDs(self.get_rules_id())
88 1
        notselected_rules = []
89 1
        return self._check_rules_id(rules, notselected_rules)
90
91 1
    def create_dict_of_rule(self, rule):
92 1
        self.oval_tree = self.load_json_to_oval_tree(rule)
93 1
        return self.create_dict_of_oval_node(self.oval_tree)
94
95 1
    def _put_to_dict_oval_trees(self, dict_oval_trees, rule, date=None):
96 1
        dict_oval_trees[rule.replace(
97
            self.START_OF_FILE_NAME, '')] = self.create_dict_of_rule(rule)
98
99 1
    def _get_src_for_one_graph(self, rule, date=None):
100 1
        return self.get_save_src(rule.replace(self.START_OF_FILE_NAME, ''))
101
102 1
    def prepare_parser(self):
103 1
        super().prepare_parser()
104 1
        self.parser.add_argument(
105
            '--all-in-one',
106
            action="store_true",
107
            default=False,
108
            help="Processes all rules into one file.")
109 1
        self.parser.add_argument(
110
            '--off-web-browser',
111
            action="store_true",
112
            default=False,
113
            help="It does not start the web browser.")
114