Passed
Push — master ( b781e7...0b2115 )
by Matěj
01:22 queued 12s
created

oval_graph.json_to_html.JsonToHtml.prepare_data()   A

Complexity

Conditions 3

Size

Total Lines 18
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 3.0175

Importance

Changes 0
Metric Value
cc 3
eloc 18
nop 2
dl 0
loc 18
rs 9.5
c 0
b 0
f 0
ccs 14
cts 16
cp 0.875
crap 3.0175
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
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.arg = self.parse_arguments(args)
18 1
        self.off_webbrowser = self.arg.off_web_browser
19 1
        self.source_filename = self.arg.source_filename
20 1
        self.out = self.arg.output
21 1
        self.all_rules = self.arg.all
22 1
        self.oval_tree = None
23 1
        self.isatty = sys.stdout.isatty()
24
25 1
    def load_json_to_oval_tree(self, rule):
26 1
        with open(self.source_filename, 'r') as f:
27 1
            try:
28 1
                return restore_dict_to_tree(json.load(f)[rule])
29
            except Exception as error:
30
                raise ValueError("err- Used file is not json or valid.")
31
32 1
    def create_dict_of_oval_node(self, oval_node):
33 1
        converter = Converter(oval_node)
34 1
        return converter.to_JsTree_dict()
35
36 1
    def load_rule_names(self):
37 1
        with open(self.source_filename, 'r') as f:
38 1
            try:
39 1
                return json.load(f).keys()
40
            except Exception as error:
41
                raise ValueError("err- Used file is not json or valid.")
42
43 1
    def search_rules_id(self):
44 1
        out = []
45 1
        for id in self.load_rule_names():
46 1
            out.append(dict(id_rule=id))
47 1
        return out
48
49 1
    def get_choices(self):
50
        rules = self.search_rules_id()
51
        choices = []
52
        for rule in rules:
53
            choices.append(rule['id_rule'])
54
        return choices
55
56 1
    def prepare_data(self, rules):
57 1
        try:
58 1
            out = []
59 1
            for rule in rules["rules"]:
60 1
                self.oval_tree = self.load_json_to_oval_tree(rule)
61 1
                rule_name = self.oval_tree.node_id
62 1
                oval_tree_dict = self.create_dict_of_oval_node(self.oval_tree)
63 1
                src = self.get_save_src(rule_name)
64 1
                self.copy_interpreter(src)
65 1
                self.save_dict(oval_tree_dict, src)
66 1
                self.open_web_browser(src)
67 1
                print('Rule "{}" done!'.format(rule_name))
68 1
                out.append(src)
69 1
            return out
70
        except Exception as error:
71
            raise ValueError(
72
                'Rule: "{}" Error: "{}"'.format(
73
                    self.source_filename, error))
74
75 1
    def prepare_parser(self):
76 1
        self.parser = argparse.ArgumentParser(
77
            description="Client for visualization of SCAP rule evaluation results")
78 1
        self.parser.add_argument(
79
            '--off-web-browser',
80
            action="store_true",
81
            default=False,
82
            help="It does not start the web browser.")
83 1
        self.parser.add_argument(
84
            '--output',
85
            action="store",
86
            default=None,
87
            help="Save the output files where it is defined.")
88 1
        self.parser.add_argument(
89
            '--all',
90
            action="store_true",
91
            default=False,
92
            help="Process all matched rules.")
93
        self.parser.add_argument("source_filename", help="ARF scan file")
94