diff --git a/app/logger.py b/app/logger.py index dc392d8..f40a301 100644 --- a/app/logger.py +++ b/app/logger.py @@ -11,12 +11,18 @@ Usage: logger.info("message") """ +from __future__ import annotations import os import sys import logging +from types import FrameType +from typing import TYPE_CHECKING from dotenv import load_dotenv from loguru import logger +if TYPE_CHECKING: + from loguru import Record + def get_log_level() -> str: """Reads LOG_LEVEL or log_level from .env or environment, defaults to 'INFO'.""" @@ -27,12 +33,12 @@ def get_log_level() -> str: # ── Stdout / stderr filters ─────────────────────────────────────────────────── -def _stdout_filter(record: dict) -> bool: +def _stdout_filter(record: Record) -> bool: """Pass DEBUG / INFO / WARNING to stdout.""" return record["level"].no < logging.ERROR -def _stderr_filter(record: dict) -> bool: +def _stderr_filter(record: Record) -> bool: """Pass ERROR / CRITICAL to stderr.""" return record["level"].no >= logging.ERROR @@ -43,12 +49,14 @@ class InterceptHandler(logging.Handler): """Redirect all stdlib logging calls into Loguru.""" def emit(self, record: logging.LogRecord) -> None: + level: str | int try: level = logger.level(record.levelname).name except ValueError: level = record.levelno - frame, depth = sys._getframe(6), 6 + frame: FrameType | None = sys._getframe(6) + depth = 6 while frame and frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 diff --git a/app/tests/test_visited_cards.py b/app/tests/test_visited_cards.py index 6bd7aef..067f07e 100644 --- a/app/tests/test_visited_cards.py +++ b/app/tests/test_visited_cards.py @@ -42,7 +42,7 @@ async def test_get_random_cards_valid(): params = {"user_id": EXIST_USER} response = await client.get("/get_random_cards", params=params) print(f"\nINPUT: endpoint=/get_random_cards\nOUTPUT: status={response.status_code} | json={response.json()}") - if response.status_code == 404 and BaseResponse.model_validate(response.json()).result == "No active cards": + if response.status_code == 404 and "No active cards" in str(BaseResponse.model_validate(response.json()).result): global NO_ACTIVE_CARDS_STATUS NO_ACTIVE_CARDS_STATUS = True pytest.skip(reason="No active cards in MongoDB")