/
html_generator.py
55 lines (43 loc) · 1.91 KB
/
html_generator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from pathlib import Path
from datetime import datetime
from data_questionnaire_agent.model.application_schema import Questionnaire
from data_questionnaire_agent.model.openai_schema import ConditionalAdvice
import jinja2
import pdfkit
from data_questionnaire_agent.config import cfg
from data_questionnaire_agent.log_init import logger
def generate_html(questionnaire: Questionnaire, advices: ConditionalAdvice) -> str:
timestamp = datetime.today().strftime("%A, %b %d %Y")
context = {
"questionnaire": questionnaire.to_html(),
"advices": advices.to_html(),
"timestamp": timestamp,
}
template_loader = jinja2.FileSystemLoader(cfg.template_location)
template_env = jinja2.Environment(loader=template_loader)
template = template_env.get_template("results-template.html")
return template.render(context)
def generate_pdf_from(questionnaire: Questionnaire, advices: ConditionalAdvice) -> Path:
if questionnaire is None:
return None
html = generate_html(questionnaire, advices)
file_name = (
cfg.pdf_folder / f"Advice from the {cfg.product_title}_{generate_iso()}.pdf"
)
config = pdfkit.configuration(wkhtmltopdf=cfg.wkhtmltopdf_binary.as_posix())
pdfkit.from_string(html, file_name, configuration=config)
logger.info("Created PDF: %s", file_name)
return file_name
def generate_iso() -> str:
current_time = datetime.now()
return current_time.isoformat().replace(":", ".")
if __name__ == "__main__":
from data_questionnaire_agent.test.provider.advice_provider import (
create_simple_advice,
)
from data_questionnaire_agent.test.provider.questionnaire_provider import (
create_questionnaire_2_questions,
)
questionnaire: Questionnaire = create_questionnaire_2_questions()
advices: ConditionalAdvice = create_simple_advice()
logger.info("PDF Path: %s", generate_pdf_from(questionnaire, advices))