Optionally save file to store path
This commit is contained in:
parent
8a07cbf2aa
commit
55b6d565b0
|
@ -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}>"
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user