Source code for gain.utils.verbosity_configuration

"""Provides common configuration for loggers verbosity."""
import argparse
from collections.abc import Mapping
from typing import Any

from gain import logging


[docs] class VerbosityConfiguration: """Defines common configuration of verbosity for loggers."""
[docs] @staticmethod def set_arguments(parser: argparse.ArgumentParser) -> None: """Add verbosity arguments to argument parser.""" parser.add_argument("--verbose", "-v", "-V", action="count", default=0) parser.add_argument( "--logfile", type=str, default=None, help="File to log output to. If not set, logs to console.", )
[docs] @staticmethod def set(args: argparse.Namespace | Mapping[str, Any]) -> None: """Read verbosity settings from parsed arguments and sets logger.""" if isinstance(args, argparse.Namespace): args = vars(args) verbosity = int(args.get("verbose", 0)) loglevel = VerbosityConfiguration.verbosity(verbosity) # basicConfig only adds a handler, and ignores ``level`` once the # root has one; ``force=True`` would close handlers other code # owns. Set the level directly, and only ever more verbose. logging.basicConfig(filename=args["logfile"], encoding="utf-8") root = logging.getLogger() root.setLevel(min(root.level, loglevel)) VerbosityConfiguration.adjust_verbosity(loglevel)
[docs] @staticmethod def verbosity(verbosity: int) -> int: """Get verbosity level from loglevel.""" if verbosity == 1: loglevel = logging.INFO elif verbosity == 2: loglevel = logging.DEBUG elif verbosity >= 3: loglevel = logging.TRACE else: loglevel = logging.WARNING return loglevel
[docs] @staticmethod def adjust_verbosity(loglevel: int) -> None: """Keep the chatty third-party loggers no louder than the CLI.""" logging.getLogger("impala").setLevel(logging.WARNING) logging.getLogger("distributed").setLevel(logging.WARNING) logging.getLogger("bokeh").setLevel(logging.ERROR) logging.getLogger("fsspec").setLevel(max(loglevel, logging.INFO)) logging.getLogger("matplotlib").setLevel(max(loglevel, logging.INFO)) logging.getLogger("botocore").setLevel(max(loglevel, logging.INFO)) logging.getLogger("s3fs").setLevel(max(loglevel, logging.INFO))