latecomers/latecomers/helpers.py

42 lines
1.3 KiB
Python

# -*- 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