openscap_report.scap_results_parser.parsers.group_parser   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 57
dl 0
loc 77
ccs 47
cts 47
cp 1
rs 10
c 0
b 0
f 0
wmc 16

9 Methods

Rating   Name   Duplication   Size   Complexity  
A GroupParser._set_title_to_group_dict() 0 3 1
A GroupParser.insert_to_dict_group_to_platforms() 0 3 1
A GroupParser.get_group() 0 25 4
A GroupParser._append_platform_to_group_dict() 0 3 1
A GroupParser._append_sub_group_to_group_dict() 0 2 1
A GroupParser.__init__() 0 6 1
A GroupParser._append_rule_id_to_group_dict() 0 3 1
A GroupParser._set_description_to_group_dict() 0 2 1
A GroupParser.get_groups() 0 10 5
1
# Copyright 2022, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3
4 1
import re
5
6 1
from ..data_structures import Group
7 1
from ..namespaces import NAMESPACES
8 1
from .full_text_parser import FullTextParser
9
10
11 1
class GroupParser:
12 1
    def __init__(self, root, ref_values, benchmark_el):
13 1
        self.root = root
14 1
        self.benchmark_el = benchmark_el
15 1
        self.description_parser = FullTextParser(ref_values)
16 1
        self.rule_to_group_id = {}
17 1
        self.group_to_platforms = {}
18
19 1
    def insert_to_dict_group_to_platforms(self, group_dict, platforms):
20 1
        platforms_of_group = list(set(group_dict.get("platforms")) | set(platforms))
21 1
        self.group_to_platforms[group_dict.get("group_id")] = platforms_of_group
22
23 1
    @staticmethod
24 1
    def _set_title_to_group_dict(group_dict, item):
25 1
        group_dict["title"] = item.text
26
27 1
    def _set_description_to_group_dict(self, group_dict, item):
28 1
        group_dict["description"] = self.description_parser.get_full_description(item)
29
30 1
    @staticmethod
31 1
    def _append_platform_to_group_dict(group_dict, item):
32 1
        group_dict["platforms"].append(item.get("idref"))
33
34 1
    def _append_sub_group_to_group_dict(self, group_dict, item):
35 1
        group_dict["sub_groups"].append(self.get_group(item, group_dict.get("platforms")))
36
37 1
    def _append_rule_id_to_group_dict(self, group_dict, item):
38 1
        group_dict["rules_ids"].append(item.get("id"))
39 1
        self.rule_to_group_id[item.get("id")] = group_dict.get("group_id")
40
41 1
    def get_group(self, group_el, platforms=None):
42 1
        if platforms is None:
43 1
            platforms = []
44 1
        group_dict = {
45
            "platforms": [],
46
            "rules_ids": [],
47
            "sub_groups": [],
48
            "group_id": group_el.get("id"),
49
        }
50
51 1
        tag_to_function = {
52
            "title": self._set_title_to_group_dict,
53
            "description": self._set_description_to_group_dict,
54
            "platform": self._append_platform_to_group_dict,
55
            "Group": self._append_sub_group_to_group_dict,
56
            "Rule": self._append_rule_id_to_group_dict,
57
        }
58
59 1
        for item in group_el.iterchildren():
60 1
            tag_without_namespace_prefix = re.sub(r"{(.*?)}", "", item.tag)
61 1
            if tag_without_namespace_prefix in tag_to_function:
62 1
                tag_to_function[tag_without_namespace_prefix](group_dict, item)
63
64 1
        self.insert_to_dict_group_to_platforms(group_dict, platforms)
65 1
        return Group(**group_dict)
66
67 1
    def get_groups(self):
68 1
        groups = {}
69 1
        group_el = self.root.find(".//xccdf:Group", NAMESPACES)
70 1
        if group_el is None or self.benchmark_el is None:
71 1
            return groups
72
73 1
        for item in self.benchmark_el:
74 1
            if "Group" in item.tag:
75 1
                groups[item.get("id")] = self.get_group(item)
76
        return groups
77