used jinja templates

This commit is contained in:
Stanislas Jouffroy 2025-05-21 23:40:07 +02:00
parent aa4f085286
commit 84381325f1
5 changed files with 31 additions and 36 deletions

View file

@ -5,7 +5,7 @@ from dotenv import load_dotenv
load_dotenv() load_dotenv()
MENU_CRECHE_PDF_URL = os.environ.get("MENU_CRECHE_PDF_URL") MENU_CRECHE_PDF_URL = os.environ.get("MENU_CRECHE_PDF_URL")
MENU_TYPE = os.environ.get("MENU_KIND") MENU_TYPES = os.environ.get("MENU_TYPES").split(",")
SIGNAL_SENDER = os.environ.get("SIGNAL_SENDER") SIGNAL_SENDER = os.environ.get("SIGNAL_SENDER")
SIGNAL_RECIPIENTS = os.environ.get("SIGNAL_RECIPIENTS", default=SIGNAL_SENDER).split( SIGNAL_RECIPIENTS = os.environ.get("SIGNAL_RECIPIENTS", default=SIGNAL_SENDER).split(
"," ","

22
main.py
View file

@ -1,12 +1,13 @@
from pathlib import Path from pathlib import Path
from dotenv import load_dotenv from dotenv import load_dotenv
from jinja2 import Environment, PackageLoader, select_autoescape, FileSystemLoader
from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser from pdfminer.pdfparser import PDFParser
from config import ( from config import (
MENU_CRECHE_PDF_URL, MENU_CRECHE_PDF_URL,
MENU_TYPE, MENU_TYPES,
SIGNAL_SENDER, SIGNAL_SENDER,
SIGNAL_RECIPIENTS, SIGNAL_RECIPIENTS,
SIGNAL_API_URL, SIGNAL_API_URL,
@ -36,16 +37,21 @@ def main():
modification_date = pdf_metadata[0]["ModDate"].decode("utf-8").removeprefix("D:") modification_date = pdf_metadata[0]["ModDate"].decode("utf-8").removeprefix("D:")
result_file = ResultFile(Path.home() / ".cache" / "menu_creche.txt") result_file = ResultFile(Path.home() / ".cache" / "menu_creche.txt")
if result_file.was_already_sent(creation_date, modification_date, MENU_TYPE):
return
message_formatter = MenuMessageFormatter() templates_path = Path(__file__).parent / "templates"
message = message_formatter.create_message(menus, MENU_TYPE) env = Environment(loader=FileSystemLoader(templates_path), autoescape=select_autoescape())
message_formatter = MenuMessageFormatter(env)
signal_messager = SignalMessager(SIGNAL_API_URL, SIGNAL_SENDER) for menu_type in MENU_TYPES:
signal_messager.send_message(message, menu_pdf_file, SIGNAL_RECIPIENTS) if result_file.was_already_sent(creation_date, modification_date, menu_type):
return
result_file.write(creation_date, modification_date, MENU_TYPE) message = message_formatter.create_message(menus, menu_type)
signal_messager = SignalMessager(SIGNAL_API_URL, SIGNAL_SENDER)
signal_messager.send_message(message, menu_pdf_file, SIGNAL_RECIPIENTS)
result_file.write(creation_date, modification_date, menu_type)
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -1,5 +1,6 @@
from pathlib import Path from pathlib import Path
from jinja2 import Environment
from pdfminer.high_level import extract_text from pdfminer.high_level import extract_text
from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser from pdfminer.pdfparser import PDFParser
@ -110,8 +111,10 @@ class Line:
class MenuMessageFormatter: class MenuMessageFormatter:
@staticmethod def __init__(self, env: Environment):
def create_message(menus: Menus, menu_type: str) -> str: self.env = env
def create_message(self, menus: Menus, menu_type: str) -> str:
days = menus.days days = menus.days
if menu_type.lower() == "introduction": if menu_type.lower() == "introduction":
menu = menus.introduction menu = menus.introduction
@ -124,28 +127,5 @@ class MenuMessageFormatter:
else: else:
raise Exception(f"Unknown menu type: {menu_type}") raise Exception(f"Unknown menu type: {menu_type}")
return f""" template = self.env.get_template("menus.txt")
**Menu de la crèche** (message automatique) return template.render(menu=menu, menu_type=menu_type, days=days)
Menu {menu_type}:
{days[0].upper()}:
*Midi*: {menu[days[0]]["midi"]}
*Goûter*: {menu[days[0]]["gouter"]}
{days[1].upper()}:
*Midi*: {menu[days[1]]["midi"]}
*Goûter*: {menu[days[1]]["gouter"]}
{days[2].upper()}:
*Midi*: {menu[days[2]]["midi"]}
*Goûter*: {menu[days[2]]["gouter"]}
{days[3].upper()}:
*Midi*: {menu[days[3]]["midi"]}
*Goûter*: {menu[days[3]]["gouter"]}
{days[4].upper()}:
*Midi*: {menu[days[4]]["midi"]}
*Goûter*: {menu[days[4]]["gouter"]}
"""

View file

@ -1,3 +1,4 @@
requests~=2.32.3 requests~=2.32.3
pdfminer.six==20250506 pdfminer.six==20250506
python-dotenv~=1.1.0 python-dotenv~=1.1.0
jinja2~=3.1.6

8
templates/menus.txt Normal file
View file

@ -0,0 +1,8 @@
**Menu de la crèche**
Menu {{ menu_type.upper() }}:
{% for day in days %}
**{{ day.upper() }}**
**Midi :** {{ menu[day]["midi"] }}
**Goûter :** {{ menu[day]["gouter"] }}
{% endfor %}