import os import time import logging import traceback from datetime import datetime, timedelta from pathlib import Path from functools import wraps ########### # LOGGING # ########### logger = logging.getLogger("acoused") ######### # WRAPS # ######### def trace(func): @wraps(func) def wrapper(*args, **kwargs): t = time.time() head = f"[TRACE]" logger.debug( f"{head} Call {func.__module__}." + f"{func.__qualname__}({args}, {kwargs})" ) value = func(*args, **kwargs) t1 = time.time() logger.debug( f"{head} Return {func.__module__}." + f"{func.__qualname__}: {value}" ) dt = t1-t logger.debug( f"{head}[TIME] {func.__module__}." + f"{func.__qualname__}: {dt:f} sec" ) return value return wrapper