Passed
Push — master ( be999b...2f9937 )
by Jan
02:07 queued 11s
created

oval_graph.converter.Converter._get_node_style()   A

Complexity

Conditions 4

Size

Total Lines 17
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 14
nop 1
dl 0
loc 17
ccs 12
cts 12
cp 1
crap 4
rs 9.7
c 0
b 0
f 0
1 1
import re
2 1
import uuid
3
4 1
from .oval_node import OvalNode
5
6
7 1
class Converter():
8 1
    def __init__(self, tree):
9 1
        self.VALUE_TO_BOOTSTRAP_COLOR = {
10
            "true": "text-success",
11
            "false": "text-danger",
12
            "error": "text-dark",
13
            "unknown": "text-dark",
14
            "noteval": "text-dark",
15
            "notappl": "text-dark"
16
        }
17
18 1
        self.BOOTSTRAP_COLOR_TO_LABEL_COLOR = {
19
            "text-success": "label-success",
20
            "text-danger": "label-danger",
21
            "text-dark": "label-default"
22
        }
23
24 1
        self.VALUE_TO_ICON = {
25
            "true": "glyphicon glyphicon-ok text-success",
26
            "false": "glyphicon glyphicon-remove text-danger",
27
            "error": "glyphicon glyphicon-question-sign text-dark",
28
            "unknown": "glyphicon glyphicon-question-sign text-dark",
29
            "noteval": "glyphicon glyphicon-question-sign text-dark",
30
            "notappl": "glyphicon glyphicon-question-sign text-dark"
31
        }
32
33 1
        if isinstance(tree, OvalNode):
34 1
            self.tree = tree
35
        else:
36
            raise ValueError('err - this is not tree created from OvalNodes')
37
38 1
    def _get_node_icon(self):
39 1
        values = self._get_node_style()
40 1
        return dict(
41
            color=self.VALUE_TO_BOOTSTRAP_COLOR[values['negation_color']],
42
            icon=self.VALUE_TO_ICON[values['test_value']],
43
        )
44
45 1
    def get_comment(self):
46 1
        if self.tree.comment is not None:
47 1
            return str(self.tree.comment)
48 1
        return ""
49
50 1
    def get_tag(self):
51 1
        if self.tree.tag is not None:
52 1
            return str(self.tree.tag)
53 1
        return ""
54
55 1
    def to_JsTree_dict(self, hide_passing_tests=False):
56 1
        icons = self._get_node_icon()
57 1
        label = self._get_label()
58 1
        out = {'text':
59
               '{negation} <strong><span class="{icon}">{label}</span></strong>'
60
               ' <span class="label {color_tag}">{tag}</span> <i>{comment}</i>'
61
               .format(negation=str(
62
                   label['negation'] if label['negation'] else ""),
63
                   icon=icons['color'],
64
                   label=label['str'],
65
                   color_tag=self.BOOTSTRAP_COLOR_TO_LABEL_COLOR[icons['color']],
66
                   tag=self.get_tag(),
67
                   comment=self.get_comment()),
68
               "icon": icons['icon'],
69
               "state": {"opened": self._show_node(hide_passing_tests)}}
70 1
        if self.tree.children:
71 1
            out['children'] = [Converter(child).to_JsTree_dict(
72
                hide_passing_tests) for child in self.tree.children]
73 1
        return out
74
75 1
    def _show_node(self, hide_passing_tests):
76 1
        value = self.tree.evaluate_tree()
77 1
        if value is None:
78 1
            value = self.tree.value
79 1
        if value == 'true' and hide_passing_tests:
80
            return False
81 1
        return True
82
83 1
    def _get_node_style(self):
84 1
        value = self.tree.evaluate_tree()
85 1
        out_color = None
86 1
        if value is None:
87 1
            if self.tree.negation:
88 1
                out_color = self.negate_bool(self.tree.value)
89
            else:
90 1
                out_color = self.tree.value
91 1
            value = self.tree.value
92
        else:
93 1
            if self.tree.negation:
94 1
                out_color = self.negate_bool(value)
95
            else:
96 1
                out_color = value
97 1
        return dict(
98
            negation_color=out_color,
99
            test_value=value,
100
        )
101
102 1
    def get_negation_character(self, value):
103 1
        return ('<strong><span class="' +
104
                self.VALUE_TO_BOOTSTRAP_COLOR[value] +
105
                '">NOT</strong></span>')
106
107 1
    def _get_label(self):
108 1
        out = dict(negation=None, str="")
109 1
        if self.tree.node_type == 'value':
110 1
            if self.tree.negation:
111 1
                out['negation'] = self.get_negation_character(self.tree.value)
112 1
            out['str'] = re.sub(
113
                '(oval:ssg-test_|oval:ssg-)|(:def:1|:tst:1)', '', str(self.tree.node_id))
114 1
            return out
115
        else:
116 1
            if str(self.tree.node_id).startswith('xccdf_org'):
117 1
                out['str'] = re.sub(
118
                    '(xccdf_org.ssgproject.content_)', '', str(
119
                        self.tree.node_id))
120 1
                return out
121
            else:
122 1
                if self.tree.negation:
123 1
                    out['negation'] = self.get_negation_character(
124
                        self.tree.evaluate_tree())
125 1
                out['str'] = (self.tree.value).upper()
126 1
                return out
127
128 1
    def negate_bool(self, value):
129 1
        values = {
130
            "true": "false",
131
            "false": "true",
132
        }
133
        return values[str(value)]
134