olindgre 2ece01e1d7 Make powertrain-build not overlap with pybuild in site-packages
Change-Id: I7b59f3f04f0f787d35db0b9389f295bf1ad24f56
2024-09-17 10:25:04 +02:00

134 lines
3.4 KiB
Python

# Copyright 2024 Volvo Car Corporation
# Licensed under Apache 2.0.
"""Module for html report generation."""
from string import Template
class HtmlReport:
"""Generate template html report. Extend this class to add content.
TODO: Refactor common parts from derived report classes to this class.
"""
__html_head = """<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
body {
counter-reset: h2;
font-family:"Segoe UI","Segoe",Tahoma,Helvetica,Arial,sans-serif;
}
h1 {text-align: center}
h2 {counter-reset: h3}
h3 {counter-reset: h4}
h4 {counter-reset: h5}
h5 {counter-reset: h6}
h2:before {counter-increment: h2; content: counter(h2) ". "}
h3:before {counter-increment: h3; content: counter(h2) "." counter(h3) ". "}
h4:before {counter-increment: h4; content: counter(h2) "." counter(h3) "." counter(h4) ". "}
h5:before {counter-increment: h5; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "}
h6:before {
counter-increment: h6; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "
}
h2.nocount:before, h3.nocount:before, h4.nocount:before, h5.nocount:before, h6.nocount:before {
content: ""; counter-increment: none
}
p {
padding-left:5mm;
}
table {
width:95%;
margin-left:5mm
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 5px;
text-align: left;
}
table tr:nth-child(even) {
background-color: #eee;
}
table tr:nth-child(odd) {
background-color:#fff;
}
table th {
background-color: black;
color: white;
}
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding-left:5mm;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ". ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") " ";
}
</style>
<title>$title</title>
</head>
<body>
<h1>$title</h1>
"""
__html_end = """</body>
</html>
"""
def __init__(self, title):
"""Initialize report title.
Args:
title (str): The report title
"""
super().__init__()
self._title = title
def _gen_header(self):
"""Generate html header."""
return Template(self.__html_head).substitute(title=self._title)
@staticmethod
def gen_contents():
"""Generate report contents.
Override this method to add report contents.
Contents should start with a <h2> header.
"""
return '<h2>Template report</h2>'
def _gen_end(self):
"""Generate the end of the body and html document."""
return self.__html_end
def generate_report_string(self):
"""Generate a html report as string."""
html = []
html += self._gen_header()
html += self.gen_contents()
html += self._gen_end()
return ''.join(html)
def generate_report_file(self, filename):
"""Generate a html report and save to file."""
with open(filename, 'w', encoding="utf-8") as fhndl:
fhndl.write(self.generate_report_string())