Message399118
There are problems with clearing all ignored deprecation filters.
We can want to ignore warnings in narrower or wider scope: per-method, per-class, per-module. We should use the warnings.catch_warnings() context manager for restoring filters in the correct scope. For example, use setUp/tearDown, setUpClass/tearDownClass, setUpModule/tearDownModule and save the context manager as an instance/class attribute or module global.
def setUp(self):
self.w = warnings.catch_warnings()
self.w.__enter__()
warnings.filterwarnings(...)
def tearDown():
self.w.__exit__(None, None, None)
It is hard to use any helper here because the code should be added in multiple places.
Or use setUp/addCleanup, setUpClass/addClassCleanup, setUpModule/addModuleCleanup if you want to keep all code in one place:
def setUp(self):
w = warnings.catch_warnings()
w.__enter__()
self.addCleanup(w.__exit__, None, None, None)
warnings.filterwarnings(...)
The helper can call catch_warnings(), __enter__(), set filters and return a caller which calls __exit__(None, None, None):
def setUp(self):
self.addCleanup(some_helper(...))
For class and method scopes it would be convenient to use class and method decorators correspondingly.
@ignore_some_warnings(...)
def test_foo(self):
...
@ignore_some_warnings(...)
class BarTests(unittest.TestCase):
... |
|
Date |
User |
Action |
Args |
2021-08-06 18:25:28 | serhiy.storchaka | set | recipients:
+ serhiy.storchaka, lukasz.langa |
2021-08-06 18:25:28 | serhiy.storchaka | set | messageid: <1628274328.4.0.627207641933.issue44852@roundup.psfhosted.org> |
2021-08-06 18:25:28 | serhiy.storchaka | link | issue44852 messages |
2021-08-06 18:25:28 | serhiy.storchaka | create | |
|