Coverage for src/geodense/__init__.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-10-11 14:11 +0000

1import contextlib 

2import logging 

3import sys 

4from importlib.metadata import PackageNotFoundError, version 

5from logging import Formatter, NullHandler, StreamHandler 

6 

7logging.getLogger(__name__).addHandler(NullHandler()) 

8 

9with contextlib.suppress(PackageNotFoundError): 

10 __version__ = version("geodense") 

11 

12 

13def get_log_handler(verbose: bool) -> logging.StreamHandler: 

14 formatter = get_formatter(verbose) 

15 handler = logging.StreamHandler(stream=sys.stderr) 

16 handler.setFormatter(formatter) 

17 return handler 

18 

19 

20def get_formatter(verbose: bool) -> Formatter: 

21 format_string_default = "[%(levelname)s] %(message)s" 

22 format_string_verbose = ( 

23 f"[%(levelname)s] [%(filename)s:%(lineno)d] [{__name__}.%(module)s.%(funcName)s] %(message)s" 

24 ) 

25 format_string = format_string_verbose if verbose else format_string_default 

26 formatter = logging.Formatter(format_string) 

27 return formatter 

28 

29 

30# copied from https://github.com/urllib3/urllib3/blob/f7cd7f3f632cf5224f627536f02c2abf7e4146d1/src/urllib3/__init__.py and adapted 

31# error handling convention: 

32# expected caught errors -> log as error 

33# unexpected caugh errors (this is the case for a generic error handler) -> log as exception 

34def add_stderr_logger(verbose: bool = False) -> StreamHandler: 

35 """ 

36 Adding streamhandler to the logger, used for CLI output to stderr. 

37 

38 Returns the handler after adding it. 

39 """ 

40 # This method needs to be in this __init__.py to get the __name__ correct 

41 # even if geodense is vendored within another package. 

42 # verbose: False 

43 # - loglevel: WARNING 

44 # - format_string: default 

45 # verbose: True 

46 # - loglevel: DEBUG 

47 # - format_string: verbose 

48 level = logging.DEBUG if verbose else logging.WARNING 

49 handler = get_log_handler(verbose) 

50 logger = logging.getLogger(__name__) 

51 logger.addHandler(handler) 

52 logger.setLevel(level) 

53 return handler