Skip to content
This repository has been archived by the owner on Jan 29, 2024. It is now read-only.

Commit

Permalink
Restrict logging level manipulation to bluesearch loggers (#568)
Browse files Browse the repository at this point in the history
  • Loading branch information
jankrepl authored Feb 17, 2022
1 parent 8445082 commit 08fc2b0
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/bluesearch/entrypoint/database/parent.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@


def _setup_logging(logging_level: int) -> None:
root_logger = logging.getLogger()
bluesearch_logger = logging.getLogger("bluesearch")

# Logging level
root_logger.setLevel(logging_level)
bluesearch_logger.setLevel(logging_level)

# Formatter
fmt = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
Expand All @@ -34,7 +34,7 @@ def _setup_logging(logging_level: int) -> None:
# Handler
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(formatter)
root_logger.addHandler(handler)
bluesearch_logger.addHandler(handler)


def main(argv: Sequence[str] | None = None) -> int:
Expand Down
38 changes: 38 additions & 0 deletions tests/unit/entrypoint/database/test_parent.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,46 @@
from __future__ import annotations

import logging
import subprocess

import pytest

from bluesearch.entrypoint.database.parent import _setup_logging


@pytest.mark.parametrize("command", ["add", "convert-pdf", "init", "parse"])
def test_commands_work(command):
subprocess.run(["bbs_database", command, "--help"], check=True)


def test_setup_logging(caplog):
def get_levels(loggers: dict[str, logging.Logger]) -> dict[str, int]:
"""Get logging level for each logger."""
return {name: logger.getEffectiveLevel() for name, logger in loggers.items()}

caplog.set_level(logging.WARNING, logger="bluesearch")

all_loggers = logging.root.manager.loggerDict
bluesearch_loggers = {
k: v
for k, v in all_loggers.items()
if k.startswith("bluesearch") and isinstance(v, logging.Logger)
}
external_loggers = {
k: v
for k, v in all_loggers.items()
if not k.startswith("bluesearch") and isinstance(v, logging.Logger)
}

bluesearch_levels_before = get_levels(bluesearch_loggers)
external_levels_before = get_levels(external_loggers)

_setup_logging(logging.DEBUG)

bluesearch_levels_after = get_levels(bluesearch_loggers)
external_levels_after = get_levels(external_loggers)

assert set(bluesearch_levels_before.values()) == {logging.WARNING}
assert set(bluesearch_levels_after.values()) == {logging.DEBUG}

assert external_levels_before == external_levels_after

0 comments on commit 08fc2b0

Please sign in to comment.