Context manager that prepares the whole logging machinery properly.
| 297 | |
| 298 | # Not using @contextmanager for performance reasons. |
| 299 | class catching_logs: |
| 300 | """Context manager that prepares the whole logging machinery properly.""" |
| 301 | |
| 302 | __slots__ = ("handler", "level", "orig_level") |
| 303 | |
| 304 | def __init__(self, handler: _HandlerType, level: Optional[int] = None) -> None: |
| 305 | self.handler = handler |
| 306 | self.level = level |
| 307 | |
| 308 | def __enter__(self): |
| 309 | root_logger = logging.getLogger() |
| 310 | if self.level is not None: |
| 311 | self.handler.setLevel(self.level) |
| 312 | root_logger.addHandler(self.handler) |
| 313 | if self.level is not None: |
| 314 | self.orig_level = root_logger.level |
| 315 | root_logger.setLevel(min(self.orig_level, self.level)) |
| 316 | return self.handler |
| 317 | |
| 318 | def __exit__(self, type, value, traceback): |
| 319 | root_logger = logging.getLogger() |
| 320 | if self.level is not None: |
| 321 | root_logger.setLevel(self.orig_level) |
| 322 | root_logger.removeHandler(self.handler) |
| 323 | |
| 324 | |
| 325 | class LogCaptureHandler(logging.StreamHandler): |
no outgoing calls
no test coverage detected