Use records.clear() in LogCaptureHandler when caplog.clear()

This commit is contained in:
zx.qiu 2022-06-24 19:17:55 +08:00
parent c7e784f95d
commit f29f79e39f
2 changed files with 10 additions and 14 deletions

View File

@ -40,7 +40,6 @@ if TYPE_CHECKING:
else:
logging_StreamHandler = logging.StreamHandler
DEFAULT_LOG_FORMAT = "%(levelname)-8s %(name)s:%(filename)s:%(lineno)d %(message)s"
DEFAULT_LOG_DATE_FORMAT = "%H:%M:%S"
_ANSI_ESCAPE_SEQ = re.compile(r"\x1b\[[\d;]+m")
@ -335,16 +334,6 @@ class LogCaptureHandler(logging_StreamHandler):
"""Create a new log handler."""
super().__init__(StringIO())
self.records: List[logging.LogRecord] = []
self.set_when(None)
def set_when(self, when: Optional[str]) -> None:
"""Prepare for the given test phase (setup/call/teardown)."""
self._when = when
def get_when(self) -> Optional[str]:
return self._when
when = property(get_when, set_when)
def emit(self, record: logging.LogRecord) -> None:
"""Keep the log records in a list in addition to the log text."""
@ -355,6 +344,10 @@ class LogCaptureHandler(logging_StreamHandler):
self.records = []
self.stream = StringIO()
def clear(self) -> None:
self.records.clear()
self.stream = StringIO()
def handleError(self, record: logging.LogRecord) -> None:
if logging.raiseExceptions:
# Fail the test if the log message is bad (emit failed).
@ -450,8 +443,7 @@ class LogCaptureFixture:
def clear(self) -> None:
"""Reset the list of log records and the captured log text."""
self.handler.reset()
self._item.stash[caplog_records_key][self.handler.when] = self.records
self.handler.clear()
def set_level(self, level: Union[int, str], logger: Optional[str] = None) -> None:
"""Set the level of a logger for the duration of a test.
@ -706,7 +698,6 @@ class LoggingPlugin:
level=self.log_level,
) as report_handler:
caplog_handler.reset()
caplog_handler.set_when(when)
report_handler.reset()
item.stash[caplog_records_key][when] = caplog_handler.records
item.stash[caplog_handler_key] = caplog_handler

View File

@ -184,6 +184,11 @@ def test_clear_for_call_stage(caplog, logging_during_setup_and_teardown):
assert [x.message for x in caplog.get_records("setup")] == ["a_setup_log"]
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
logging.info("a_call_log_after_clear")
assert [x.message for x in caplog.get_records("call")] == ["a_call_log_after_clear"]
assert [x.message for x in caplog.get_records("setup")] == ["a_setup_log"]
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
def test_ini_controls_global_log_level(pytester: Pytester) -> None:
pytester.makepyfile(