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
|
|
|
|