From 83d4c6394b59b5ffc77fd3e7a2a6dc51ca7b3e55 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen <pauli.t.virtanen@jyu.fi> Date: Wed, 21 Sep 2022 15:35:07 +0300 Subject: [PATCH] Improve with_log_level --- usadelndsoc/__init__.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/usadelndsoc/__init__.py b/usadelndsoc/__init__.py index 85ea542..1a74608 100644 --- a/usadelndsoc/__init__.py +++ b/usadelndsoc/__init__.py @@ -1,6 +1,7 @@ # -*- coding:utf-8; eval: (blacken-mode) -*- import logging +import contextlib logger = logging.getLogger(__name__) @@ -35,23 +36,20 @@ def _init_logging(): logging.config.dictConfig(cfg) -def with_log_level(level): - import functools +class with_log_level(contextlib.ContextDecorator): + def __init__(self, level, old_level=None): + self._level = level + self._old_level = old_level - def deco(func): - @functools.wraps(func) - def wrapper(*a, **kw): - old_level = int(logger.level) - logger.setLevel(level) - try: - return func(*a, **kw) - finally: - logger.setLevel(old_level) + def __enter__(self): + cm = with_log_level(self._level, int(logger.level)) + logger.setLevel(cm._level) + return cm - return wrapper - - return deco + def __exit__(self, *exc): + logger.setLevel(self._old_level) + return False _init_logging() -del _init_logging, logging +del _init_logging, logging, contextlib -- GitLab