put trace in a result file
This commit is contained in:
parent
618213572f
commit
e042263871
3 changed files with 47 additions and 43 deletions
59
main.py
59
main.py
|
@ -5,6 +5,8 @@ from pathlib import Path
|
||||||
import requests
|
import requests
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from pdfminer.high_level import extract_text
|
from pdfminer.high_level import extract_text
|
||||||
|
from pdfminer.pdfdocument import PDFDocument
|
||||||
|
from pdfminer.pdfparser import PDFParser
|
||||||
|
|
||||||
from config import (
|
from config import (
|
||||||
MENU_CRECHE_PDF_URL,
|
MENU_CRECHE_PDF_URL,
|
||||||
|
@ -16,51 +18,16 @@ from config import (
|
||||||
from menus import Menus, MenuMessageFormatter
|
from menus import Menus, MenuMessageFormatter
|
||||||
from message_sender import SignalMessager
|
from message_sender import SignalMessager
|
||||||
from pdf_downloader import download
|
from pdf_downloader import download
|
||||||
|
from result_file import ResultFile
|
||||||
|
|
||||||
load_dotenv()
|
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}:
|
def read_pdf_metadata(pdf_file: Path):
|
||||||
|
fp = open(pdf_file, "rb")
|
||||||
{days[0].upper()}:
|
parser = PDFParser(fp)
|
||||||
*Midi*: {menu[days[0]]["midi"]}
|
doc = PDFDocument(parser)
|
||||||
*Goûter*: {menu[days[0]]["gouter"]}
|
return doc.info
|
||||||
|
|
||||||
{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():
|
def main():
|
||||||
|
@ -68,12 +35,22 @@ def main():
|
||||||
|
|
||||||
menus = Menus(menu_pdf_file)
|
menus = Menus(menu_pdf_file)
|
||||||
|
|
||||||
|
pdf_metadata = read_pdf_metadata(menu_pdf_file)
|
||||||
|
creation_date = pdf_metadata[0]["CreationDate"].decode("utf-8").removeprefix("D:")
|
||||||
|
modification_date = pdf_metadata[0]["ModDate"].decode("utf-8").removeprefix("D:")
|
||||||
|
|
||||||
|
result_file = ResultFile(Path.home() / ".cache" / "menu_creche.txt")
|
||||||
|
if result_file.was_already_sent(creation_date, modification_date, MENU_TYPE):
|
||||||
|
return
|
||||||
|
|
||||||
message_formatter = MenuMessageFormatter()
|
message_formatter = MenuMessageFormatter()
|
||||||
message = message_formatter.create_message(menus, MENU_TYPE)
|
message = message_formatter.create_message(menus, MENU_TYPE)
|
||||||
|
|
||||||
signal_messager = SignalMessager(SIGNAL_API_URL, SIGNAL_SENDER)
|
signal_messager = SignalMessager(SIGNAL_API_URL, SIGNAL_SENDER)
|
||||||
signal_messager.send_message(message, menu_pdf_file, SIGNAL_RECIPIENTS)
|
signal_messager.send_message(message, menu_pdf_file, SIGNAL_RECIPIENTS)
|
||||||
|
|
||||||
|
result_file.write(creation_date, modification_date, MENU_TYPE)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
11
menus.py
11
menus.py
|
@ -1,12 +1,14 @@
|
||||||
import base64
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from pdfminer.high_level import extract_text
|
from pdfminer.high_level import extract_text
|
||||||
|
from pdfminer.pdfdocument import PDFDocument
|
||||||
|
from pdfminer.pdfparser import PDFParser
|
||||||
|
|
||||||
|
|
||||||
class Menus:
|
class Menus:
|
||||||
def __init__(self, menu_pdf_file: Path):
|
def __init__(self, menu_pdf_file: Path):
|
||||||
self.menu_pdf_file = menu_pdf_file
|
self.menu_pdf_file = menu_pdf_file
|
||||||
|
self.pdf_metadata = self.extract_pdf_metadata()
|
||||||
|
|
||||||
self._cells = self.extract_cells()
|
self._cells = self.extract_cells()
|
||||||
self.month = self.extract_month()
|
self.month = self.extract_month()
|
||||||
|
@ -17,6 +19,12 @@ class Menus:
|
||||||
self.petit_muscle = self.extract_petit_muscle_menu()
|
self.petit_muscle = self.extract_petit_muscle_menu()
|
||||||
self.petit_lion = self.extract_petit_lion_menu()
|
self.petit_lion = self.extract_petit_lion_menu()
|
||||||
|
|
||||||
|
def extract_pdf_metadata(self):
|
||||||
|
fp = open(self.menu_pdf_file, "rb")
|
||||||
|
parser = PDFParser(fp)
|
||||||
|
doc = PDFDocument(parser)
|
||||||
|
return doc.info
|
||||||
|
|
||||||
def extract_cells(self) -> list[str]:
|
def extract_cells(self) -> list[str]:
|
||||||
text = extract_text(self.menu_pdf_file, page_numbers=[0])
|
text = extract_text(self.menu_pdf_file, page_numbers=[0])
|
||||||
|
|
||||||
|
@ -141,4 +149,3 @@ Menu {menu_type}:
|
||||||
*Midi*: {menu[days[4]]["midi"]}
|
*Midi*: {menu[days[4]]["midi"]}
|
||||||
*Goûter*: {menu[days[4]]["gouter"]}
|
*Goûter*: {menu[days[4]]["gouter"]}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
20
result_file.py
Normal file
20
result_file.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class ResultFile:
|
||||||
|
def __init__(self, path: Path):
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
def write(self, creation_date: str, modification_date: str, menu_type: str) -> None:
|
||||||
|
if not self.path.exists():
|
||||||
|
self.path.write_text("")
|
||||||
|
with self.path.open(mode="a") as file:
|
||||||
|
file.write(f"{creation_date}/{modification_date}/{menu_type}\n")
|
||||||
|
|
||||||
|
def was_already_sent(
|
||||||
|
self, creation_date: str, modification_date: str, menu_type: str
|
||||||
|
):
|
||||||
|
if not self.path.exists():
|
||||||
|
return False
|
||||||
|
content = self.path.read_text()
|
||||||
|
return f"{creation_date}/{modification_date}/{menu_type}\n" in content
|
Loading…
Add table
Add a link
Reference in a new issue