import json
import os
from jinja2 import Environment, FileSystemLoader
from lib.core.decorators import locked
from lib.core.settings import COMMAND, START_TIME
from lib.report.factory import BaseReport, FileReportMixin
class HTMLReport(FileReportMixin, BaseReport):
__format__ = "html"
__extension__ = "html"
def new(self):
return self.generate([])
def parse(self, file):
with open(file) as fh:
while 1:
line = fh.readline()
if line.startswith(" resources: "):
return json.loads(line[19:-2])
@locked
def save(self, file, result):
results = self.parse(file)
results.append({
"url": result.url,
"status": result.status,
"contentLength": result.length,
"contentType": result.type,
"redirect": result.redirect,
})
self.write(file, self.generate(results))
def generate(self, results):
file_loader = FileSystemLoader(
os.path.dirname(os.path.realpath(__file__)) + "/templates/"
)
env = Environment(loader=file_loader)
template = env.get_template("html_report_template.html")
return template.render(
metadata={"command": COMMAND, "date": START_TIME},
results=results,
)