Skip to content

Commit

Permalink
fix logging wrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
programmingAthlete committed Dec 29, 2023
1 parent 8633ba4 commit 8af8a4a
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 5 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from setuptools import setup, find_packages

__version__ = "1.5.0"
__version__ = "1.5.1"

with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
Expand Down
12 changes: 8 additions & 4 deletions src/crypto_pkg/utils/logging.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import inspect
import logging

from crypto_pkg import settings
Expand All @@ -9,14 +10,17 @@ def get_logger(location: str = __name__):
return log


def set_level(logger):
def set_level(logger: logging.Logger, level: int = logging.DEBUG):
def deco(func):
def wrapper(*args, **kwargs):
_verbose = kwargs.get('_verbose', None)
if _verbose is None and len(args) == 5:
_verbose = args[4]
if _verbose is None:
params = inspect.signature(func).parameters
default_verbose = params.get('_verbose', {}).default
_verbose = next((arg_value for i, arg_value in enumerate(args) if list(params)[i] == '_verbose'),
default_verbose)
if _verbose is True:
logger.setLevel(logging.DEBUG)
logger.setLevel(level)
return func(*args, **kwargs)

return wrapper
Expand Down
49 changes: 49 additions & 0 deletions tests/test_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import logging
import unittest

from crypto_pkg.utils.logging import get_logger, set_level

log = get_logger()


class TestLogger(unittest.TestCase):

def test_logger_dec_without_level(self):
@set_level(log)
def func(_a: int, _verbose=False):
pass

log.setLevel(logging.INFO)

func(_a=1)
self.assertEqual(log.level, logging.INFO)
func(1)
self.assertEqual(log.level, logging.INFO)

func(_a=1, _verbose=True)
self.assertEqual(log.level, logging.DEBUG)

log.setLevel(logging.INFO)

func(1, True)
self.assertEqual(log.level, logging.DEBUG)

def test_logger_dec_with_level(self):
@set_level(logger=log, level=logging.ERROR)
def func(_a: int, _verbose=False):
pass

log.setLevel(logging.INFO)

func(_a=1)
self.assertEqual(log.level, logging.INFO)
func(1)
self.assertEqual(log.level, logging.INFO)

func(_a=1, _verbose=True)
self.assertEqual(log.level, logging.ERROR)

log.setLevel(logging.INFO)

func(1, True)
self.assertEqual(log.level, logging.ERROR)

0 comments on commit 8af8a4a

Please sign in to comment.