feedBack/tests/conftest.py
2026-06-16 18:47:13 +02:00

49 lines
1.5 KiB
Python

"""Shared pytest fixtures for the slopsmith test suite."""
import logging
import pytest
import structlog
_LOGGING_NAMES = ("slopsmith", "uvicorn", "uvicorn.error", "uvicorn.access")
@pytest.fixture()
def isolate_logging():
"""Restore slopsmith / uvicorn logger state after each test.
Saves handlers, level, and propagate flag before the test runs and
restores all three on teardown. Import into any test module that calls
configure_logging() so mutations don't bleed across tests.
"""
saved = {}
for name in _LOGGING_NAMES:
lg = logging.getLogger(name)
saved[name] = (
list(lg.handlers), # snapshot the handler list
lg.level,
lg.propagate,
)
yield
for name in _LOGGING_NAMES:
lg = logging.getLogger(name)
original_handlers, original_level, original_propagate = saved[name]
# Close and remove any handlers that were added during the test.
for h in list(lg.handlers):
if h not in original_handlers:
lg.removeHandler(h)
h.close()
# Remove any original handlers that may have been removed during the test
# so we can add them back cleanly.
for h in list(lg.handlers):
lg.removeHandler(h)
# Reattach the original handlers.
for h in original_handlers:
lg.addHandler(h)
lg.setLevel(original_level)
lg.propagate = original_propagate
structlog.reset_defaults()