import os
import logging
import traceback
from functools import wraps
from pathlib import Path
### Constants ###
BASE_PATH = Path(__file__).parent
NOTMUCH_DATABASE_PATH = os.environ["NOTMUCH_DATABASE_PATH"]
NOTMUCH_REPLY_SEPARATORS = list(os.environ["NOTMUCH_REPLY_SEPARATORS"].split("|"))
SENDMAIL_FROM_EMAIL = os.environ["SENDMAIL_FROM_EMAIL"]
SENDMAIL_EMAIL_SIGNATURE_HTML = os.environ.get("SENDMAIL_EMAIL_SIGNATURE_HTML", "")
LOG_FILE_PATH = os.environ.get('LOG_FILE_PATH', False)
### Logging ###
def setup_logger():
if LOG_FILE_PATH is not False:
logger = logging.getLogger('function_logger')
fh = logging.FileHandler(LOG_FILE_PATH)
fh.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger.addHandler(fh)
return logger
return None
logger = setup_logger()
def log(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not logger:
return func(*args, **kwargs)
try:
logger.info(f"Calling {func.__name__} with args={args}, kwargs={kwargs}")
result = func(*args, **kwargs)
logger.info(f"{func.__name__} returned {result}")
return result
except Exception as e:
logger.error(f"{func.__name__} raised {type(e).__name__}: {str(e)}\n{traceback.format_exc()}")
raise
return wrapper