diff options
author | Martin Panter <vadmium+py@gmail.com> | 2016-05-26 09:10:55 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2016-05-26 09:10:55 (GMT) |
commit | 43593a1892b73754e509713799a043ac756ae1e1 (patch) | |
tree | 1f4a2dbb7b86019c9dacc445e25877ce4a5bc8df /Lib/warnings.py | |
parent | 46f50726a0047ae81d478c3a206f587b8f35ed08 (diff) | |
download | cpython-43593a1892b73754e509713799a043ac756ae1e1.zip cpython-43593a1892b73754e509713799a043ac756ae1e1.tar.gz cpython-43593a1892b73754e509713799a043ac756ae1e1.tar.bz2 |
Issue #18383: Avoid adding duplicate filters when warnings is reloaded
Based on patch by Alex Shkop.
Diffstat (limited to 'Lib/warnings.py')
-rw-r--r-- | Lib/warnings.py | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/Lib/warnings.py b/Lib/warnings.py index dfa13ee..c6631fc 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -56,13 +56,8 @@ def filterwarnings(action, message="", category=Warning, module="", lineno=0, assert isinstance(module, str), "module must be a string" assert isinstance(lineno, int) and lineno >= 0, \ "lineno must be an int >= 0" - item = (action, re.compile(message, re.I), category, - re.compile(module), lineno) - if append: - filters.append(item) - else: - filters.insert(0, item) - _filters_mutated() + _add_filter(action, re.compile(message, re.I), category, + re.compile(module), lineno, append=append) def simplefilter(action, category=Warning, lineno=0, append=False): """Insert a simple entry into the list of warnings filters (at the front). @@ -78,11 +73,20 @@ def simplefilter(action, category=Warning, lineno=0, append=False): "once"), "invalid action: %r" % (action,) assert isinstance(lineno, int) and lineno >= 0, \ "lineno must be an int >= 0" - item = (action, None, category, None, lineno) - if append: - filters.append(item) - else: + _add_filter(action, None, category, None, lineno, append=append) + +def _add_filter(*item, append): + # Remove possible duplicate filters, so new one will be placed + # in correct place. If append=True and duplicate exists, do nothing. + if not append: + try: + filters.remove(item) + except ValueError: + pass filters.insert(0, item) + else: + if item not in filters: + filters.append(item) _filters_mutated() def resetwarnings(): |