menu-creche/main.py
2025-06-13 23:48:40 +02:00

68 lines
2 KiB
Python

import hashlib
from pathlib import Path
from dotenv import load_dotenv
from jinja2 import Environment, FileSystemLoader, select_autoescape
from config import (
MENU_CRECHE_PDF_URL,
SIGNAL_SENDER,
SIGNAL_RECIPIENTS,
SIGNAL_API_URL,
)
from logging_conf import get_logger
from menus import Menus, MenuMessageFormatter
from message_sender import SignalMessager
from pdf_downloader import download
from result_file import ResultFile
load_dotenv()
logger = get_logger(__name__)
templates_path = Path(__file__).parent
env = Environment(
loader=FileSystemLoader(templates_path), autoescape=select_autoescape()
)
message_formatter = MenuMessageFormatter(env)
signal_messager = SignalMessager(SIGNAL_API_URL, SIGNAL_SENDER)
def main():
logger.info(f"Téléchargement du menu à l'adresse {MENU_CRECHE_PDF_URL}...")
menu_pdf_file = download(MENU_CRECHE_PDF_URL, file_name="menu.pdf")
with open(menu_pdf_file, "rb") as pdf_file:
sha256 = hashlib.file_digest(pdf_file, "sha256").hexdigest()
try:
menus = Menus(menu_pdf_file)
except IndexError as err:
logger.error(err)
return
result_file = ResultFile(Path.home() / ".cache" / "menu_creche.txt")
if result_file.was_already_sent(sha256, menus):
logger.info(
f"Le menu de la semaine du {menus.date()} avec pour sha256 {sha256} a déjà "
f"été envoyé"
)
return
is_update = result_file.is_update(sha256, menus)
if is_update:
logger.info(f"Ce menu est une mise-à-jour pour la semaine du {menus.date()}")
else:
logger.info(f"1er envoi du message pour la semaine du {menus.date()}")
result_file.write(sha256, menus)
message = message_formatter.create_message(menus, is_update)
logger.info(
f"Envoi du message aux numéros {SIGNAL_RECIPIENTS} de la part de "
f"{SIGNAL_SENDER} avec pour contenu:\n\n{message}"
)
signal_messager.send_message(message, menu_pdf_file, SIGNAL_RECIPIENTS)
if __name__ == "__main__":
main()