Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
b6ae2ae4
Commit
b6ae2ae4
authored
May 26, 2016
by
Martin Panter
Browse files
Options
Browse Files
Download
Plain Diff
Issue #18383: Merge warnings fix from 3.5
parents
f157982b
43593a18
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
65 additions
and
11 deletions
+65
-11
Lib/test/test_warnings/__init__.py
Lib/test/test_warnings/__init__.py
+47
-0
Lib/warnings.py
Lib/warnings.py
+15
-11
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_warnings/__init__.py
View file @
b6ae2ae4
...
...
@@ -267,6 +267,53 @@ class FilterTests(BaseTest):
self
.
module
.
warn_explicit
(
UserWarning
(
"b"
),
None
,
"f.py"
,
42
)
self
.
assertEqual
(
str
(
w
[
-
1
].
message
),
"b"
)
def
test_filterwarnings_duplicate_filters
(
self
):
with
original_warnings
.
catch_warnings
(
module
=
self
.
module
):
self
.
module
.
resetwarnings
()
self
.
module
.
filterwarnings
(
"error"
,
category
=
UserWarning
)
self
.
assertEqual
(
len
(
self
.
module
.
filters
),
1
)
self
.
module
.
filterwarnings
(
"ignore"
,
category
=
UserWarning
)
self
.
module
.
filterwarnings
(
"error"
,
category
=
UserWarning
)
self
.
assertEqual
(
len
(
self
.
module
.
filters
),
2
,
"filterwarnings inserted duplicate filter"
)
self
.
assertEqual
(
self
.
module
.
filters
[
0
][
0
],
"error"
,
"filterwarnings did not promote filter to "
"the beginning of list"
)
def
test_simplefilter_duplicate_filters
(
self
):
with
original_warnings
.
catch_warnings
(
module
=
self
.
module
):
self
.
module
.
resetwarnings
()
self
.
module
.
simplefilter
(
"error"
,
category
=
UserWarning
)
self
.
assertEqual
(
len
(
self
.
module
.
filters
),
1
)
self
.
module
.
simplefilter
(
"ignore"
,
category
=
UserWarning
)
self
.
module
.
simplefilter
(
"error"
,
category
=
UserWarning
)
self
.
assertEqual
(
len
(
self
.
module
.
filters
),
2
,
"simplefilter inserted duplicate filter"
)
self
.
assertEqual
(
self
.
module
.
filters
[
0
][
0
],
"error"
,
"simplefilter did not promote filter to the beginning of list"
)
def
test_append_duplicate
(
self
):
with
original_warnings
.
catch_warnings
(
module
=
self
.
module
,
record
=
True
)
as
w
:
self
.
module
.
resetwarnings
()
self
.
module
.
simplefilter
(
"ignore"
)
self
.
module
.
simplefilter
(
"error"
,
append
=
True
)
self
.
module
.
simplefilter
(
"ignore"
,
append
=
True
)
self
.
module
.
warn
(
"test_append_duplicate"
,
category
=
UserWarning
)
self
.
assertEqual
(
len
(
self
.
module
.
filters
),
2
,
"simplefilter inserted duplicate filter"
)
self
.
assertEqual
(
len
(
w
),
0
,
"appended duplicate changed order of filters"
)
class
CFilterTests
(
FilterTests
,
unittest
.
TestCase
):
module
=
c_warnings
...
...
Lib/warnings.py
View file @
b6ae2ae4
...
...
@@ -129,13 +129,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).
...
...
@@ -151,11 +146,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
():
...
...
Misc/NEWS
View file @
b6ae2ae4
...
...
@@ -22,6 +22,9 @@ Core and Builtins
Library
-------
- Issue #18383: Avoid creating duplicate filters when using filterwarnings
and simplefilter. Based on patch by Alex Shkop.
- Issue #23026: winreg.QueryValueEx() now return an integer for REG_QWORD type.
- Issue #26741: subprocess.Popen destructor now emits a ResourceWarning warning
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment