Fix test isolation: clear logging handlers and reset propagate flags
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
"""Pytest configuration and shared fixtures for all tests."""
|
"""Pytest configuration and shared fixtures for all tests."""
|
||||||
|
|
||||||
|
import logging
|
||||||
from unittest.mock import Mock
|
from unittest.mock import Mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -149,3 +150,44 @@ def mock_series_app_download(monkeypatch):
|
|||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def reset_logging_state():
|
||||||
|
"""Reset logging handlers and propagate flags before and after each test.
|
||||||
|
|
||||||
|
Tests that call setup_logging() or logging.config.dictConfig() may leave
|
||||||
|
FileHandlers and propagate=False on various loggers. This fixture clears
|
||||||
|
handlers and resets propagate for all relevant loggers before/after tests.
|
||||||
|
"""
|
||||||
|
# All loggers that might have handlers or propagate changes from test setup
|
||||||
|
logger_names = (
|
||||||
|
"aniworld", "uvicorn", "uvicorn.access", "uvicorn.error",
|
||||||
|
"watchfiles.main"
|
||||||
|
)
|
||||||
|
|
||||||
|
def clear_logger_state(logger_name):
|
||||||
|
logger = logging.getLogger(logger_name)
|
||||||
|
for handler in logger.handlers[:]:
|
||||||
|
logger.removeHandler(handler)
|
||||||
|
handler.close()
|
||||||
|
# Reset propagate to default (True) for child loggers
|
||||||
|
# Root logger propagate is always True by default
|
||||||
|
if logger_name != "root":
|
||||||
|
logger.propagate = True
|
||||||
|
|
||||||
|
# Clear state BEFORE test
|
||||||
|
for name in logger_names:
|
||||||
|
clear_logger_state(name)
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
# Clear state AFTER test
|
||||||
|
for name in logger_names:
|
||||||
|
clear_logger_state(name)
|
||||||
|
|
||||||
|
# Also clear root handlers
|
||||||
|
root = logging.getLogger()
|
||||||
|
for handler in root.handlers[:]:
|
||||||
|
root.removeHandler(handler)
|
||||||
|
handler.close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user