Optionally save file to store path

This commit is contained in:
sfigato 2022-09-18 23:29:02 +02:00
parent 8a07cbf2aa
commit 55b6d565b0
Signed by: blallo
GPG Key ID: 0CBE577C9B72DC3F
6 changed files with 28 additions and 10 deletions

View File

@ -20,6 +20,7 @@ def get_section(obj: T.Dict[T.Text, T.Any], key: T.Text) -> T.Any:
class Config(object): class Config(object):
smtp: T.Dict[T.Text, T.Any] = {} smtp: T.Dict[T.Text, T.Any] = {}
to: T.List[T.Text] = [] to: T.List[T.Text] = []
store: T.Optional[T.Text] = None
def __init__(self, path: T.Text) -> None: def __init__(self, path: T.Text) -> None:
self.from_file(path) self.from_file(path)
@ -46,5 +47,7 @@ class Config(object):
self.smtp["smtp_from"] = smtp.get("smtp_from") self.smtp["smtp_from"] = smtp.get("smtp_from")
self.store = content.get("store")
def __str__(self) -> T.Text: def __str__(self) -> T.Text:
return f"Config<smtp={self.smtp},to={self.to}>" return f"Config<smtp={self.smtp},to={self.to}>"

View File

@ -1,4 +1,5 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
from datetime import datetime, timedelta
import functools import functools
import logging import logging
import sys import sys
@ -48,3 +49,10 @@ def retry_and_log(logger: logging.Logger, retries: int):
return inner return inner
return wrapper return wrapper
def get_date() -> T.Text:
"""
Get yesterday's date in %Y-%m-%d format.
"""
return (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")

View File

@ -34,7 +34,7 @@ def main(config: Config):
if not data: if not data:
out.send_no_data(config.to) out.send_no_data(config.to)
excel = to_excel(data) excel = to_excel(data, config.store)
out.send_result(config.to, excel) out.send_result(config.to, excel)

View File

@ -1,6 +1,5 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
from contextlib import contextmanager from contextlib import contextmanager
from datetime import datetime, timedelta
from email import encoders from email import encoders
from email.mime.base import MIMEBase from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
@ -10,8 +9,7 @@ import smtplib
import ssl import ssl
import typing as T import typing as T
from latecomers.helpers import retry_and_log, get_date
from latecomers.helpers import retry_and_log
RETRIES = 3 RETRIES = 3
@ -58,7 +56,7 @@ class Notifier(object):
@retry_and_log(logger, RETRIES) @retry_and_log(logger, RETRIES)
def send_result(self, to: T.List[T.Text], result: bytes) -> None: def send_result(self, to: T.List[T.Text], result: bytes) -> None:
date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") date = get_date()
body = f"Resoconto dei voli dal sito di AdR per l'aereoporto di Ciampino in data {date}" # noqa: E501 body = f"Resoconto dei voli dal sito di AdR per l'aereoporto di Ciampino in data {date}" # noqa: E501
message = MIMEMultipart() message = MIMEMultipart()
@ -84,7 +82,7 @@ class Notifier(object):
@retry_and_log(logger, RETRIES) @retry_and_log(logger, RETRIES)
def send_no_data(self, to: T.List[T.Text]) -> None: def send_no_data(self, to: T.List[T.Text]) -> None:
date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") date = get_date()
body = f"""Attenzione body = f"""Attenzione
Nessun dato è stato trovato per i voli in data {date} dal sito di AdR per Nessun dato è stato trovato per i voli in data {date} dal sito di AdR per

File diff suppressed because one or more lines are too long

View File

@ -1,10 +1,11 @@
# -*- encoding: utf-8 -*- # -*- encoding: utf-8 -*-
import logging import logging
import os.path
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
import typing as T import typing as T
from latecomers.parse import Details from latecomers.parse import Details
from latecomers.helpers import logit from latecomers.helpers import logit, get_date
import pandas as pd import pandas as pd
@ -13,7 +14,7 @@ logger = logging.getLogger(__name__)
@logit(logger) @logit(logger)
def to_excel(data: T.List[Details]) -> bytes: def to_excel(data: T.List[Details], dst: T.Optional[T.Text] = None) -> bytes:
""" """
This function takes the list of parsed rows as input and returns This function takes the list of parsed rows as input and returns
the bytes corresponding to the excel file derived from such lines. the bytes corresponding to the excel file derived from such lines.
@ -38,4 +39,12 @@ def to_excel(data: T.List[Details]) -> bytes:
tmp.seek(0) tmp.seek(0)
content = tmp.read() content = tmp.read()
if dst:
filepath = os.path.join(dst, f"{get_date()}.xlsx")
try:
with open(filepath, "wb") as out:
out.write(content)
except Exception as e:
logger.warning(f"Cannot save to path '{filepath}': {e}")
return content return content