menu-creche/main.py
2025-05-21 00:01:28 +02:00

79 lines
1.9 KiB
Python

import base64
import tempfile
from pathlib import Path
import requests
from dotenv import load_dotenv
from pdfminer.high_level import extract_text
from config import (
MENU_CRECHE_PDF_URL,
MENU_TYPE,
SIGNAL_SENDER,
SIGNAL_RECIPIENTS,
SIGNAL_API_URL,
)
from menus import Menus, MenuMessageFormatter
from message_sender import SignalMessager
from pdf_downloader import download
load_dotenv()
def send_signal_message(
days: list[str], menu: dict[str, dict[str, str]], menu_pdf_file: Path
) -> None:
headers = {"Content-Type": "application/json"}
message = f"""
**Menu de la crèche** (message automatique)
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"]}
"""
text_mode = "styled"
attachment = base64.b64encode(menu_pdf_file.read_bytes())
body = {
"message": message,
"text_mode": text_mode,
"number": SIGNAL_SENDER,
"recipients": SIGNAL_RECIPIENTS,
"base64_attachments": [
f"data:application/pdf;filename=menu.pdf;base64,{attachment.decode()}"
],
}
requests.post(SIGNAL_API_URL, headers=headers, json=body)
def main():
menu_pdf_file = download(MENU_CRECHE_PDF_URL, file_name="menu.pdf")
menus = Menus(menu_pdf_file)
message_formatter = MenuMessageFormatter()
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)
if __name__ == "__main__":
main()