Passed
Pull Request — master (#105)
by Jan
05:55
created

openscap_report.report_generators.json   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 37.5%

Importance

Changes 0
Metric Value
eloc 33
dl 0
loc 44
ccs 12
cts 32
cp 0.375
rs 10
c 0
b 0
f 0
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A JSONMiniReportGenerator.generate_report() 0 9 2
A JSONReportGenerator.generate_report() 0 8 2
A JSONReportGenerator.__init__() 0 2 1
A JSONMiniReportGenerator.__init__() 0 6 1
1
# Copyright 2022, Red Hat, Inc.
2
# SPDX-License-Identifier: LGPL-2.1-or-later
3 1
import json
4 1
import logging
5 1
from io import BytesIO
6 1
from pathlib import Path
7
8 1
from jinja2 import Environment, FileSystemLoader
9
10 1
from .report_generator import ReportGenerator
11
12
13 1
class JSONReportGenerator(ReportGenerator):
14 1
    def __init__(self, parser):  # pylint: disable=W0231
15
        self.report = parser.parse_report()
16
17 1
    def generate_report(self, debug_setting):
18
        logging.warning("JSON Format is experimental output!")
19
20
        indent = None
21
        if debug_setting.no_minify:
22
            indent = "\t"
23
        json_data = json.dumps(self.report.as_dict(), indent=indent)
24
        return BytesIO(json_data.encode())
25
26
27 1
class JSONMiniReportGenerator(JSONReportGenerator):
28 1
    def __init__(self, parser):
29
        super().__init__(parser)
30
        self.file_loader = FileSystemLoader(str(Path(__file__).parent / "json_templates"))
31
        self.env = Environment(loader=self.file_loader)
32
        self.env.trim_blocks = True
33
        self.env.lstrip_blocks = True
34
35 1
    def generate_report(self, debug_setting):
36
        logging.warning("JSON Format is experimental output!")
37
        template = self.env.get_template("mini.json")
38
        json_data = json.loads(template.render(report=self.report, debug_setting=debug_setting))
39
        indent = None
40
        if debug_setting.no_minify:
41
            indent = "\t"
42
        json_report = json.dumps(json_data, indent=indent)
43
        return BytesIO(json_report.encode())
44