Add log.ignore_py_warnings()

This commit is contained in:
Florian Bruhin 2016-07-23 13:04:45 +02:00
parent 36bb5cf285
commit 64f208486e
2 changed files with 27 additions and 1 deletions

View File

@ -167,9 +167,14 @@ def init_log(args):
root.addHandler(ram) root.addHandler(ram)
root.setLevel(logging.NOTSET) root.setLevel(logging.NOTSET)
logging.captureWarnings(True) logging.captureWarnings(True)
_init_py_warnings()
QtCore.qInstallMessageHandler(qt_message_handler)
def _init_py_warnings():
"""Initialize Python warning handling."""
warnings.simplefilter('default') warnings.simplefilter('default')
warnings.filterwarnings('ignore', module='pdb', category=ResourceWarning) warnings.filterwarnings('ignore', module='pdb', category=ResourceWarning)
QtCore.qInstallMessageHandler(qt_message_handler)
@contextlib.contextmanager @contextlib.contextmanager
@ -182,6 +187,14 @@ def disable_qt_msghandler():
QtCore.qInstallMessageHandler(old_handler) QtCore.qInstallMessageHandler(old_handler)
@contextlib.contextmanager
def ignore_py_warnings(**kwargs):
"""Contextmanager to temporarily hke certain Python warnings."""
warnings.filterwarnings('ignore', **kwargs)
yield
_init_py_warnings()
def _init_handlers(level, color, force_color, json_logging, ram_capacity): def _init_handlers(level, color, force_color, json_logging, ram_capacity):
"""Init log handlers. """Init log handlers.

View File

@ -23,6 +23,7 @@ import logging
import argparse import argparse
import itertools import itertools
import sys import sys
import warnings
import pytest import pytest
import pytest_catchlog import pytest_catchlog
@ -36,6 +37,7 @@ def restore_loggers():
Based on CPython's Lib/test/test_logging.py. Based on CPython's Lib/test/test_logging.py.
""" """
logging.captureWarnings(False)
logger_dict = logging.getLogger().manager.loggerDict logger_dict = logging.getLogger().manager.loggerDict
logging._acquireLock() logging._acquireLock()
try: try:
@ -278,3 +280,14 @@ def test_stub(caplog, suffix, expected):
log.stub(suffix) log.stub(suffix)
assert len(caplog.records) == 1 assert len(caplog.records) == 1
assert caplog.records[0].message == expected assert caplog.records[0].message == expected
def test_ignore_py_warnings(caplog):
logging.captureWarnings(True)
with log.ignore_py_warnings(category=UserWarning):
warnings.warn("hidden", UserWarning)
with caplog.at_level(logging.WARNING):
warnings.warn("not hidden", UserWarning)
assert len(caplog.records) == 1
msg = caplog.records[0].message.splitlines()[0]
assert msg.endswith("UserWarning: not hidden")