import asyncio import logging from functools import wraps def suppress(func): """Suppress all logs that the decorated function may create Examples: >>> import logging >>> import shush >>> logging.basicConfig() >>> logger = logging.getLogger("some_logger") >>> logger.setLevel(logging.INFO) >>> @shush.suppress >>> def suppressed_func(): >>> logger.info("this should not be logged") >>> def normal_func(): >>> logger.info("this should be logged") >>> suppressed_func() >>> normal_func() INFO:some_logger:this should be logged """ if not asyncio.iscoroutinefunction(func): @wraps(func) def wrapper(*args, **kwargs): logging.disable(logging.CRITICAL) try: return func(*args, **kwargs) finally: logging.disable(logging.NOTSET) return wrapper @wraps(func) async def async_wrapper(*args, **kwargs): logging.disable(logging.CRITICAL) try: return await func(*args, **kwargs) finally: logging.disable(logging.NOTSET) return async_wrapper