Refactor notifier and add helpers
This commit is contained in:
parent
060190be61
commit
b15fc9cdca
41
latecomers/helpers.py
Normal file
41
latecomers/helpers.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
import logging
|
||||||
|
import typing as T
|
||||||
|
|
||||||
|
|
||||||
|
def logit(logger: logging.Logger) -> T.Callable[..., T.Any]:
|
||||||
|
def wrapper(func: T.Callable[..., T.Any]) -> T.Callable[..., T.Any]:
|
||||||
|
def inner(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
value = func(*args, **kwargs)
|
||||||
|
logger.info(f"Success: {func.__name__}(args={args}, kwargs={kwargs})")
|
||||||
|
return value
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failure: {e}")
|
||||||
|
|
||||||
|
return inner
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
def retry_and_log(logger: logging.Logger, retries: int):
|
||||||
|
"""
|
||||||
|
This decorator wraps a function, logs at info in case of success and logs
|
||||||
|
error in case an exception is raised.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def wrapper(func: T.Callable[..., T.Any]) -> T.Callable[..., T.Any]:
|
||||||
|
def inner(*args, **kwargs):
|
||||||
|
for i in range(retries):
|
||||||
|
try:
|
||||||
|
value = func(*args, **kwargs)
|
||||||
|
logger.info(
|
||||||
|
f"Success ({i+1} tentative): {func.__name__}(args={args}, kwargs={kwargs})" # noqa: E501
|
||||||
|
)
|
||||||
|
return value
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failure ({i+1} tentative): {e}")
|
||||||
|
|
||||||
|
return inner
|
||||||
|
|
||||||
|
return wrapper
|
|
@ -10,27 +10,13 @@ import ssl
|
||||||
import typing as T
|
import typing as T
|
||||||
|
|
||||||
|
|
||||||
|
from latecomers.helpers import retry_and_log
|
||||||
|
|
||||||
|
|
||||||
RETRIES = 3
|
RETRIES = 3
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def retry_and_log(func: T.Callable[..., T.Any]) -> T.Callable[..., T.Any]:
|
|
||||||
"""
|
|
||||||
This decorator wraps a function, logs at info in case of success and logs
|
|
||||||
error in case an exception is raised.
|
|
||||||
"""
|
|
||||||
def inner(*args, **kwargs):
|
|
||||||
for i in range(RETRIES):
|
|
||||||
try:
|
|
||||||
func(*args, **kwargs)
|
|
||||||
logger.info(f"Success ({i+1} tentative): {func.__name__}(args={args}, kwargs={kwargs})") # noqa: E501
|
|
||||||
return
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"Failure ({i+1} tentative): {e}")
|
|
||||||
|
|
||||||
return inner
|
|
||||||
|
|
||||||
|
|
||||||
class Notifier(object):
|
class Notifier(object):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
@ -65,7 +51,7 @@ class Notifier(object):
|
||||||
self._conn.sendmail(self._from, to, email)
|
self._conn.sendmail(self._from, to, email)
|
||||||
self._conn.close()
|
self._conn.close()
|
||||||
|
|
||||||
@retry_and_log
|
@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().strftime("%Y-%m-%d")
|
date = datetime.now().strftime("%Y-%m-%d")
|
||||||
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
|
||||||
|
@ -90,3 +76,23 @@ class Notifier(object):
|
||||||
email = message.as_string()
|
email = message.as_string()
|
||||||
|
|
||||||
self.send(to, email)
|
self.send(to, email)
|
||||||
|
|
||||||
|
@retry_and_log(logger, RETRIES)
|
||||||
|
def send_no_data(self, to: T.List[T.Text]) -> None:
|
||||||
|
date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
body = f"""Attenzione
|
||||||
|
|
||||||
|
Nessun dato è stato trovato per i voli in data {date} dal sito di AdR per
|
||||||
|
l'aereoporto di Ciampino. Questo è probabile indice di errore. Contattate
|
||||||
|
il vostro tecnico preferito.
|
||||||
|
"""
|
||||||
|
|
||||||
|
message = MIMEMultipart()
|
||||||
|
message["From"] = self._from
|
||||||
|
message["To"] = ",".join(to)
|
||||||
|
message["Subject"] = f"ATTENZIONE: [{date}] Resoconto CIA da AdR"
|
||||||
|
|
||||||
|
message.attach(MIMEText(body, "plain"))
|
||||||
|
email = message.as_string()
|
||||||
|
|
||||||
|
self.send(to, email)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user