Add new filtering() method to LogCaptureFixture class (#11625)
Fixes #11610
This commit is contained in:
parent
a42530a09d
commit
acab13fcc9
1
AUTHORS
1
AUTHORS
|
@ -188,6 +188,7 @@ Javier Romero
|
||||||
Jeff Rackauckas
|
Jeff Rackauckas
|
||||||
Jeff Widman
|
Jeff Widman
|
||||||
Jenni Rinker
|
Jenni Rinker
|
||||||
|
Jens Tröger
|
||||||
John Eddie Ayson
|
John Eddie Ayson
|
||||||
John Litborn
|
John Litborn
|
||||||
John Towler
|
John Towler
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Added :func:`LogCaptureFixture.filtering() <pytest.LogCaptureFixture.filtering>` context manager that
|
||||||
|
adds a given :class:`logging.Filter` object to the caplog fixture.
|
|
@ -564,6 +564,22 @@ class LogCaptureFixture:
|
||||||
self.handler.setLevel(handler_orig_level)
|
self.handler.setLevel(handler_orig_level)
|
||||||
logging.disable(original_disable_level)
|
logging.disable(original_disable_level)
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def filtering(self, filter_: logging.Filter) -> Generator[None, None, None]:
|
||||||
|
"""Context manager that temporarily adds the given filter to the caplog's
|
||||||
|
:meth:`handler` for the 'with' statement block, and removes that filter at the
|
||||||
|
end of the block.
|
||||||
|
|
||||||
|
:param filter_: A custom :class:`logging.Filter` object.
|
||||||
|
|
||||||
|
.. versionadded:: 7.5
|
||||||
|
"""
|
||||||
|
self.handler.addFilter(filter_)
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
self.handler.removeFilter(filter_)
|
||||||
|
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def caplog(request: FixtureRequest) -> Generator[LogCaptureFixture, None, None]:
|
def caplog(request: FixtureRequest) -> Generator[LogCaptureFixture, None, None]:
|
||||||
|
|
|
@ -144,7 +144,7 @@ def test_change_level_undos_handler_level(pytester: Pytester) -> None:
|
||||||
result.assert_outcomes(passed=3)
|
result.assert_outcomes(passed=3)
|
||||||
|
|
||||||
|
|
||||||
def test_with_statement(caplog: pytest.LogCaptureFixture) -> None:
|
def test_with_statement_at_level(caplog: pytest.LogCaptureFixture) -> None:
|
||||||
with caplog.at_level(logging.INFO):
|
with caplog.at_level(logging.INFO):
|
||||||
logger.debug("handler DEBUG level")
|
logger.debug("handler DEBUG level")
|
||||||
logger.info("handler INFO level")
|
logger.info("handler INFO level")
|
||||||
|
@ -159,7 +159,9 @@ def test_with_statement(caplog: pytest.LogCaptureFixture) -> None:
|
||||||
assert "CRITICAL" in caplog.text
|
assert "CRITICAL" in caplog.text
|
||||||
|
|
||||||
|
|
||||||
def test_with_statement_logging_disabled(caplog: pytest.LogCaptureFixture) -> None:
|
def test_with_statement_at_level_logging_disabled(
|
||||||
|
caplog: pytest.LogCaptureFixture,
|
||||||
|
) -> None:
|
||||||
logging.disable(logging.CRITICAL)
|
logging.disable(logging.CRITICAL)
|
||||||
assert logging.root.manager.disable == logging.CRITICAL
|
assert logging.root.manager.disable == logging.CRITICAL
|
||||||
with caplog.at_level(logging.WARNING):
|
with caplog.at_level(logging.WARNING):
|
||||||
|
@ -185,6 +187,22 @@ def test_with_statement_logging_disabled(caplog: pytest.LogCaptureFixture) -> No
|
||||||
assert logging.root.manager.disable == logging.CRITICAL
|
assert logging.root.manager.disable == logging.CRITICAL
|
||||||
|
|
||||||
|
|
||||||
|
def test_with_statement_filtering(caplog: pytest.LogCaptureFixture) -> None:
|
||||||
|
class TestFilter(logging.Filter):
|
||||||
|
def filter(self, record: logging.LogRecord) -> bool:
|
||||||
|
record.msg = "filtered handler call"
|
||||||
|
return True
|
||||||
|
|
||||||
|
with caplog.at_level(logging.INFO):
|
||||||
|
with caplog.filtering(TestFilter()):
|
||||||
|
logger.info("handler call")
|
||||||
|
logger.info("handler call")
|
||||||
|
|
||||||
|
filtered_tuple, unfiltered_tuple = caplog.record_tuples
|
||||||
|
assert filtered_tuple == ("test_fixture", 20, "filtered handler call")
|
||||||
|
assert unfiltered_tuple == ("test_fixture", 20, "handler call")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"level_str,expected_disable_level",
|
"level_str,expected_disable_level",
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in New Issue