import base64 import tempfile from pathlib import Path import os import requests from dotenv import load_dotenv from pdfminer.high_level import extract_text load_dotenv() def main(): menu_link = os.environ.get("MENU_CRECHE_PDF_URL") menu_pdf = requests.get(menu_link).content tmp_folder = Path(tempfile.mkdtemp()) menu_file = tmp_folder / "menu.pdf" menu_file.write_bytes(menu_pdf) text = extract_text(menu_file, page_numbers=[0]) previous_was_title = False curated_text = "" for line in text.splitlines(): if len(line) == 1: previous_was_title = True elif len(line) > 1 and line[1] == " ": curated_text += f"{line[2:]}\n" previous_was_title = True elif len(line) > 0 and line[0].islower(): curated_text = curated_text.removesuffix("\n") curated_text += f"{line}\n" previous_was_title = False elif line == '' and previous_was_title: previous_was_title = False else: curated_text += f"{line}\n" previous_was_title = False cells = curated_text.split("\n\n") # remove month month = cells.pop(0) # remove meals titles for i in range(5): cells.pop(0) days = [] for i in range(5): days.append(cells.pop(0)) menus = { "introduction": { days[0]: {"midi": cells[0], "gouter": cells[5]}, days[1]: {"midi": cells[1], "gouter": cells[6]}, days[2]: {"midi": cells[2], "gouter": cells[7]}, days[3]: {"midi": cells[3], "gouter": cells[8]}, days[4]: {"midi": cells[4], "gouter": cells[9]}, }, "diversification": { days[0]: {"midi": cells[10], "gouter": cells[15]}, days[1]: {"midi": cells[11], "gouter": cells[16]}, days[2]: {"midi": cells[12], "gouter": cells[17]}, days[3]: {"midi": cells[13], "gouter": cells[18]}, days[4]: {"midi": cells[14], "gouter": cells[19]}, }, "petit musclé": { days[0]: {"midi": cells[20], "gouter": cells[24]}, days[1]: {"midi": cells[21], "gouter": cells[25]}, days[2]: {"midi": cells[22], "gouter": cells[26]}, days[3]: {"midi": cells[23], "gouter": cells[27]}, days[4]: {"midi": cells[32], "gouter": cells[39]}, }, "petit lion": { days[0]: {"midi": cells[28], "gouter": cells[35]}, days[1]: {"midi": cells[29], "gouter": cells[36]}, days[2]: {"midi": cells[30], "gouter": cells[37]}, days[3]: {"midi": cells[31], "gouter": cells[38]}, days[4]: {"midi": cells[34], "gouter": cells[33]}, } } menu = os.environ.get("MENU_KIND") headers = {"Content-Type": "application/json"} message = f""" **Menu de la crèche** (message automatique) Menu {menu}: {days[0].upper()}: *Midi*: {menus[menu][days[0]]["midi"]} *Goûter*: {menus[menu][days[0]]["gouter"]} {days[1].upper()}: *Midi*: {menus[menu][days[1]]["midi"]} *Goûter*: {menus[menu][days[1]]["gouter"]} {days[2].upper()}: *Midi*: {menus[menu][days[2]]["midi"]} *Goûter*: {menus[menu][days[2]]["gouter"]} {days[3].upper()}: *Midi*: {menus[menu][days[3]]["midi"]} *Goûter*: {menus[menu][days[3]]["gouter"]} {days[4].upper()}: *Midi*: {menus[menu][days[4]]["midi"]} *Goûter*: {menus[menu][days[4]]["gouter"]} """ text_mode = "styled" sender = os.environ.get("SIGNAL_SENDER") recipient = os.environ.get("SIGNAL_RECIPIENT") attachment = base64.b64encode(menu_pdf) body = { "message": message, "text_mode": text_mode, "number": sender, "recipients": [sender], "base64_attachments": [f"data:application/pdf;filename=menu.pdf;base64,{attachment.decode()}"], } host = os.environ.get("SIGNAL_API_URL") requests.post(host, headers=headers, json=body) if __name__ == '__main__': main()