diff --git a/src/aac_datasets/check.py b/src/aac_datasets/check.py index 7ddaab1..353e1ed 100644 --- a/src/aac_datasets/check.py +++ b/src/aac_datasets/check.py @@ -14,7 +14,7 @@ from aac_datasets.datasets.clotho import Clotho, ClothoCard from aac_datasets.datasets.macs import MACS, MACSCard from aac_datasets.datasets.wavcaps import WavCaps, WavCapsCard -from aac_datasets.download import _setup_logging +from aac_datasets.download import setup_logging from aac_datasets.utils.globals import get_default_root DATASETS_NAMES = (AudioCapsCard.NAME, ClothoCard.NAME, MACSCard.NAME, WavCapsCard.NAME) @@ -124,7 +124,7 @@ def _get_main_check_args() -> Namespace: def _main_check() -> None: args = _get_main_check_args() - _setup_logging(aac_datasets.__package__, args.verbose) + setup_logging(aac_datasets.__package__, args.verbose) if args.verbose >= 2: pylog.debug(yaml.dump({"Arguments": args.__dict__}, sort_keys=False)) diff --git a/src/aac_datasets/download.py b/src/aac_datasets/download.py index 0cca3db..9db9bb1 100644 --- a/src/aac_datasets/download.py +++ b/src/aac_datasets/download.py @@ -2,25 +2,17 @@ # -*- coding: utf-8 -*- import logging - from argparse import ArgumentParser, Namespace import yaml import aac_datasets - from aac_datasets.datasets.functional.audiocaps import ( AudioCapsCard, download_audiocaps_datasets, ) -from aac_datasets.datasets.functional.clotho import ( - ClothoCard, - download_clotho_datasets, -) -from aac_datasets.datasets.functional.macs import ( - MACSCard, - download_macs_datasets, -) +from aac_datasets.datasets.functional.clotho import ClothoCard, download_clotho_datasets +from aac_datasets.datasets.functional.macs import MACSCard, download_macs_datasets from aac_datasets.datasets.functional.wavcaps import ( WavCapsCard, download_wavcaps_datasets, @@ -29,16 +21,15 @@ _str_to_bool, _str_to_opt_int, _str_to_opt_str, - _setup_logging, + setup_logging, ) from aac_datasets.utils.globals import ( - get_default_root, get_default_ffmpeg_path, + get_default_root, get_default_ytdlp_path, get_default_zip_path, ) - pylog = logging.getLogger(__name__) @@ -184,7 +175,7 @@ def _get_main_download_args() -> Namespace: def _main_download() -> None: args = _get_main_download_args() - _setup_logging(aac_datasets.__package__, args.verbose) + setup_logging(aac_datasets.__package__, args.verbose) if args.verbose >= 2: pylog.debug(yaml.dump({"Arguments": args.__dict__}, sort_keys=False)) diff --git a/src/aac_datasets/utils/cmdline.py b/src/aac_datasets/utils/cmdline.py index dbffec4..a485599 100644 --- a/src/aac_datasets/utils/cmdline.py +++ b/src/aac_datasets/utils/cmdline.py @@ -3,9 +3,9 @@ import logging import sys - -from typing import Optional - +from logging import Logger +from types import ModuleType +from typing import Optional, Sequence, Union _TRUE_VALUES = ("true", "t", "yes", "y", "1") _FALSE_VALUES = ("false", "f", "no", "n", "0") @@ -40,22 +40,55 @@ def _str_to_opt_str(s: str) -> Optional[str]: return s -def _setup_logging(pkg_name: str, verbose: int, set_format: bool = True) -> None: +def setup_logging( + package_or_logger: Union[ + str, + ModuleType, + None, + Logger, + Sequence[Union[str, ModuleType, None]], + Sequence[Logger], + ], + verbose: int, + format_: Optional[str] = "[%(asctime)s][%(name)s][%(levelname)s] - %(message)s", +) -> None: + if package_or_logger is None or isinstance( + package_or_logger, (str, Logger, ModuleType) + ): + package_or_logger_lst = [package_or_logger] + else: + package_or_logger_lst = list(package_or_logger) + + name_or_logger_lst = [ + pkg.__name__ if isinstance(pkg, ModuleType) else pkg + for pkg in package_or_logger_lst + ] + logger_lst = [ + logging.getLogger(pkg_i) if not isinstance(pkg_i, Logger) else pkg_i + for pkg_i in name_or_logger_lst + ] + handler = logging.StreamHandler(sys.stdout) - if set_format: - format_ = "[%(asctime)s][%(name)s][%(levelname)s] - %(message)s" + if format_ is not None: handler.setFormatter(logging.Formatter(format_)) - pkg_logger = logging.getLogger(pkg_name) + for logger in logger_lst: + found = False + for handler in logger.handlers: + if ( + isinstance(handler, logging.StreamHandler) + and handler.stream is sys.stdout + ): + found = True + break + if not found: + logger.addHandler(handler) + + level = _verbose_to_logging_level(verbose) + logger.setLevel(level) - found = False - for handler in pkg_logger.handlers: - if isinstance(handler, logging.StreamHandler) and handler.stream is sys.stdout: - found = True - break - if not found: - pkg_logger.addHandler(handler) +def _verbose_to_logging_level(verbose: int) -> int: if verbose < 0: level = logging.ERROR elif verbose == 0: @@ -64,5 +97,4 @@ def _setup_logging(pkg_name: str, verbose: int, set_format: bool = True) -> None level = logging.INFO else: level = logging.DEBUG - - pkg_logger.setLevel(level) + return level