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
« 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
7logging.getLogger(__name__).addHandler(NullHandler())
9with contextlib.suppress(PackageNotFoundError):
10 __version__ = version("geodense")
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
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
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.
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