Passed
Push — master ( c4e6f9...dffb5c )
by Matěj
01:34 queued 11s
created

JsonToHtml.prepare_parser()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 1
dl 0
loc 7
ccs 3
cts 3
cp 1
crap 1
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 1
from .client import Client
10 1
from .oval_node import restore_dict_to_tree
11 1
from .converter import Converter
12
13
14 1
class JsonToHtml(Client):
15 1
    def __init__(self, args):
16 1
        self.parser = None
17 1
        self.MESSAGES = self._get_message()
18 1
        self.arg = self.parse_arguments(args)
19 1
        self.remove_pass_tests = self.arg.remove_pass_tests
20 1
        self.source_filename = self.arg.source_filename
21 1
        self.rule_name = self.arg.rule_id
22 1
        self.out = self.arg.output
23 1
        self.all_rules = self.arg.all
24 1
        self.isatty = sys.stdout.isatty()
25 1
        self.show_fail_rules = False
26 1
        self.show_not_selected_rules = False
27 1
        if self.remove_pass_tests:
28
            raise NotImplementedError('Not implemented!')
29 1
        self.oval_tree = None
30 1
        self.off_webbrowser = self.arg.off_web_browser
31 1
        self.json_data_file = self.get_json_data_file()
32
33 1
    def _get_message(self):
34 1
        MESSAGES = {
35
            'description': 'Client for visualization of JSON created by command arf-to-json',
36
            '--output': 'The directory where to save output directory with files.',
37
            'source_filename': 'JSON file',
38
        }
39 1
        return MESSAGES
40
41 1
    def get_json_data_file(self):
42 1
        with open(self.source_filename, 'r') as f:
43 1
            try:
44 1
                return json.load(f)
45 1
            except Exception as error:
46 1
                raise ValueError("err- Used file is not json or valid.")
47
48 1
    def load_json_to_oval_tree(self, rule):
49 1
        try:
50 1
            return restore_dict_to_tree(self.json_data_file[rule])
51 1
        except Exception as error:
52 1
            raise ValueError("err- Data is not valid for oval tree.")
53
54 1
    def create_dict_of_oval_node(self, oval_node):
55 1
        converter = Converter(oval_node)
56 1
        return converter.to_JsTree_dict()
57
58 1
    def load_rule_names(self):
59 1
        return self.json_data_file.keys()
60
61 1
    def get_rules_id(self):
62 1
        out = []
63 1
        for id in self.load_rule_names():
64 1
            out.append(dict(id_rule=id))
65 1
        return out
66
67 1
    def get_choices(self):
68
        rules = self.search_rules_id()
69
        choices = []
70
        for rule in rules:
71
            choices.append(rule['id_rule'])
72
        return choices
73
74 1
    def _get_wanted_rules(self):
75 1
        return [
76
            x for x in self.get_rules_id() if re.search(
77
                self.rule_name, x['id_rule'])]
78
79 1
    def _get_wanted_not_selected_rules(self):
80 1
        return []
81
82 1
    def prepare_data(self, rules):
83 1
        try:
84 1
            out = []
85 1
            for rule in rules["rules"]:
86 1
                self.oval_tree = self.load_json_to_oval_tree(rule)
87 1
                oval_tree_dict = self.create_dict_of_oval_node(self.oval_tree)
88 1
                src = self.get_save_src(rule.replace('graph-of-', '') + "-")
89 1
                self.copy_interpreter(src)
90 1
                self.save_dict(oval_tree_dict, src)
91 1
                self.open_web_browser(src)
92 1
                print('Rule "{}" done!'.format(rule))
93 1
                out.append(src)
94 1
            return out
95 1
        except Exception as error:
96 1
            raise ValueError(
97
                'Rule: "{}" Error: "{}"'.format(
98
                    self.source_filename, error))
99
100 1
    def prepare_parser(self):
101 1
        super().prepare_parser()
102 1
        self.parser.add_argument(
103
            '--off-web-browser',
104
            action="store_true",
105
            default=False,
106
            help="It does not start the web browser.")
107