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

View File

@ -1,4 +1,5 @@
# -*- encoding: utf-8 -*-
from datetime import datetime, timedelta
import functools
import logging
import sys
@ -48,3 +49,10 @@ def retry_and_log(logger: logging.Logger, retries: int):
return inner
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:
out.send_no_data(config.to)
excel = to_excel(data)
excel = to_excel(data, config.store)
out.send_result(config.to, excel)

View File

@ -1,6 +1,5 @@
# -*- encoding: utf-8 -*-
from contextlib import contextmanager
from datetime import datetime, timedelta
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
@ -10,8 +9,7 @@ import smtplib
import ssl
import typing as T
from latecomers.helpers import retry_and_log
from latecomers.helpers import retry_and_log, get_date
RETRIES = 3
@ -58,7 +56,7 @@ class Notifier(object):
@retry_and_log(logger, RETRIES)
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
message = MIMEMultipart()
@ -84,7 +82,7 @@ class Notifier(object):
@retry_and_log(logger, RETRIES)
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
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 -*-
import logging
import os.path
from tempfile import NamedTemporaryFile
import typing as T
from latecomers.parse import Details
from latecomers.helpers import logit
from latecomers.helpers import logit, get_date
import pandas as pd
@ -13,7 +14,7 @@ logger = logging.getLogger(__name__)
@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
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)
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