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

openscap_report.report_generators.json   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Test Coverage

Coverage 36.67%

Importance

Changes 0
Metric Value
eloc 31
dl 0
loc 41
ccs 11
cts 30
cp 0.3667
rs 10
c 0
b 0
f 0
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A JSONReportGenerator.generate_report() 0 9 2
A JSONReportGenerator.__init__() 0 6 1
A JSONEverythingReportGenerator.generate_report() 0 8 2
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):
15
        super().__init__(parser)
16
        self.file_loader = FileSystemLoader(str(Path(__file__).parent / "json_templates"))
17
        self.env = Environment(loader=self.file_loader)
18
        self.env.trim_blocks = True
19
        self.env.lstrip_blocks = True
20
21 1
    def generate_report(self, debug_setting):
22
        logging.warning("JSON Format is experimental output!")
23
        template = self.env.get_template("base.json")
24
        json_data = json.loads(template.render(report=self.report, debug_setting=debug_setting))
25
        indent = None
26
        if debug_setting.no_minify:
27
            indent = "\t"
28
        json_report = json.dumps(json_data, indent=indent)
29
        return BytesIO(json_report.encode())
30
31
32 1
class JSONEverythingReportGenerator(ReportGenerator):
33 1
    def generate_report(self, debug_setting):
34
        logging.warning("JSON Format is experimental output!")
35
36
        indent = None
37
        if debug_setting.no_minify:
38
            indent = "\t"
39
        json_data = json.dumps(self.report.as_dict(), indent=indent)
40
        return BytesIO(json_data.encode())
41