menu-creche/main.py

128 lines
3.9 KiB
Python

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