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()