annotate Lib/warnings.py @ 78069:a8aa77458e12 3.2

Add c_size_t and c_ssize_t to the ctypes summary table.
author Antoine Pitrou <solipsis@pitrou.net>
date Thu, 12 Jul 2012 20:31:50 +0200
parents 8e57b5d8f58f
children 7d69d04522e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Python part of the warnings subsystem."""
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
27958
e07b21ea3c45 Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents: 25791
diff changeset
3 # Note: function level imports should *not* be used
e07b21ea3c45 Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents: 25791
diff changeset
4 # in this module as it may cause import lock deadlock.
e07b21ea3c45 Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents: 25791
diff changeset
5 # See bug 683658.
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
6 import linecache
41986
6464cc638faa Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
7 import sys
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
16889
0feb63490093 final round of __all__ lists (I hope) - skipped urllib2 because Moshe may be
Skip Montanaro <skip@pobox.com>
parents: 16858
diff changeset
9 __all__ = ["warn", "showwarning", "formatwarning", "filterwarnings",
49100
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
10 "resetwarnings", "catch_warnings"]
16889
0feb63490093 final round of __all__ lists (I hope) - skipped urllib2 because Moshe may be
Skip Montanaro <skip@pobox.com>
parents: 16858
diff changeset
11
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
13 def showwarning(message, category, filename, lineno, file=None, line=None):
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 """Hook to write a warning to a file; replace if you like."""
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 if file is None:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 file = sys.stderr
25204
2e7fe55c0e11 Ignore IOError exceptions when writing the message.
Mark Hammond <mhammond@skippinet.com.au>
parents: 23645
diff changeset
17 try:
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
18 file.write(formatwarning(message, category, filename, lineno, line))
25204
2e7fe55c0e11 Ignore IOError exceptions when writing the message.
Mark Hammond <mhammond@skippinet.com.au>
parents: 23645
diff changeset
19 except IOError:
2e7fe55c0e11 Ignore IOError exceptions when writing the message.
Mark Hammond <mhammond@skippinet.com.au>
parents: 23645
diff changeset
20 pass # the file (probably stderr) is invalid - this warning gets lost.
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
22 def formatwarning(message, category, filename, lineno, line=None):
15853
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
23 """Function to format a warning the standard way."""
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 s = "%s:%s: %s: %s\n" % (filename, lineno, category.__name__, message)
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
25 line = linecache.getline(filename, lineno) if line is None else line
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 if line:
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
27 line = line.strip()
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
28 s += " %s\n" % line
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 return s
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
15853
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
31 def filterwarnings(action, message="", category=Warning, module="", lineno=0,
56002
fa91270b6087 Merged revisions 74821,74828-74831,74833,74835 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49533
diff changeset
32 append=False):
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 """Insert an entry into the list of warnings filters (at the front).
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
56894
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
35 'action' -- one of "error", "ignore", "always", "default", "module",
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
36 or "once"
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
37 'message' -- a regex that the warning message must match
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
38 'category' -- a class that the warning must be a subclass of
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
39 'module' -- a regex that the module name must match
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
40 'lineno' -- an integer line number, 0 matches all warnings
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
41 'append' -- if true, append to the list of filters
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
42 """
29114
4b0220260f62 defer re module imports to help improve interpreter startup
Skip Montanaro <skip@pobox.com>
parents: 27958
diff changeset
43 import re
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 assert action in ("error", "ignore", "always", "default", "module",
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
45 "once"), "invalid action: %r" % (action,)
43577
ace45b361e87 Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents: 41986
diff changeset
46 assert isinstance(message, str), "message must be a string"
41986
6464cc638faa Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 40775
diff changeset
47 assert isinstance(category, type), "category must be a class"
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 assert issubclass(category, Warning), "category must be a Warning subclass"
43577
ace45b361e87 Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents: 41986
diff changeset
49 assert isinstance(module, str), "module must be a string"
23645
e1e90b0f1f45 Remove uses of the string and types modules:
Walter Dörwald <walter@livinglogic.de>
parents: 23620
diff changeset
50 assert isinstance(lineno, int) and lineno >= 0, \
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 "lineno must be an int >= 0"
15853
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
52 item = (action, re.compile(message, re.I), category,
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
53 re.compile(module), lineno)
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
54 if append:
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
55 filters.append(item)
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
56 else:
a84b53ba90c4 - Added keyword argument 'append' to filterwarnings(); if true, this
Guido van Rossum <guido@python.org>
parents: 15611
diff changeset
57 filters.insert(0, item)
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58
56002
fa91270b6087 Merged revisions 74821,74828-74831,74833,74835 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49533
diff changeset
59 def simplefilter(action, category=Warning, lineno=0, append=False):
29813
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
60 """Insert a simple entry into the list of warnings filters (at the front).
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
61
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
62 A simple filter matches all modules and messages.
56894
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
63 'action' -- one of "error", "ignore", "always", "default", "module",
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
64 or "once"
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
65 'category' -- a class that the warning must be a subclass of
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
66 'lineno' -- an integer line number, 0 matches all warnings
b085fd0611de Merged revisions 75797 via svnmerge from
Georg Brandl <georg@python.org>
parents: 56002
diff changeset
67 'append' -- if true, append to the list of filters
29813
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
68 """
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
69 assert action in ("error", "ignore", "always", "default", "module",
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
70 "once"), "invalid action: %r" % (action,)
29813
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
71 assert isinstance(lineno, int) and lineno >= 0, \
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
72 "lineno must be an int >= 0"
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
73 item = (action, None, category, None, lineno)
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
74 if append:
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
75 filters.append(item)
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
76 else:
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
77 filters.insert(0, item)
7be24cc6c28d Change warnings to avoid importing re module during startup.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 29114
diff changeset
78
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 def resetwarnings():
23076
0fce55675cbc resetwarnings(): Remove extra space from docstring guts.
Tim Peters <tim.peters@gmail.com>
parents: 23075
diff changeset
80 """Clear the list of warning filters, so that no filters are active."""
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 filters[:] = []
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 class _OptionError(Exception):
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 """Exception used by option processing helpers."""
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 pass
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 # Helper to process -W options passed via sys.warnoptions
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 def _processoptions(args):
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 for arg in args:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 try:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 _setoption(arg)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 39442
diff changeset
92 except _OptionError as msg:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
93 print("Invalid -W option ignored:", msg, file=sys.stderr)
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
94
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 # Helper for _processoptions()
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 def _setoption(arg):
29114
4b0220260f62 defer re module imports to help improve interpreter startup
Skip Montanaro <skip@pobox.com>
parents: 27958
diff changeset
97 import re
15874
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
98 parts = arg.split(':')
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
99 if len(parts) > 5:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
100 raise _OptionError("too many fields (max 5): %r" % (arg,))
15874
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
101 while len(parts) < 5:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
102 parts.append('')
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
103 action, message, category, module, lineno = [s.strip()
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
104 for s in parts]
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
105 action = _getaction(action)
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
106 message = re.escape(message)
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
107 category = _getcategory(category)
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
108 module = re.escape(module)
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
109 if module:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
110 module = module + '$'
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
111 if lineno:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
112 try:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
113 lineno = int(lineno)
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
114 if lineno < 0:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
115 raise ValueError
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
116 except (ValueError, OverflowError):
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
117 raise _OptionError("invalid lineno %r" % (lineno,))
15874
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
118 else:
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
119 lineno = 0
4c01ee0a8073 Whitespace normalization. Top level of Lib now fixed-point for reindent.py!
Tim Peters <tim.peters@gmail.com>
parents: 15853
diff changeset
120 filterwarnings(action, message, category, module, lineno)
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
121
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 # Helper for _setoption()
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 def _getaction(action):
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 if not action:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 return "default"
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 if action == "all": return "always" # Alias
34545
9d66fba78444 Replace list of constants with tuples of constants.
Raymond Hettinger <python@rcn.com>
parents: 34278
diff changeset
127 for a in ('default', 'always', 'ignore', 'module', 'once', 'error'):
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if a.startswith(action):
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 return a
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
130 raise _OptionError("invalid action: %r" % (action,))
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 # Helper for _setoption()
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 def _getcategory(category):
29114
4b0220260f62 defer re module imports to help improve interpreter startup
Skip Montanaro <skip@pobox.com>
parents: 27958
diff changeset
134 import re
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 if not category:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 return Warning
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 if re.match("^[a-zA-Z0-9_]+$", category):
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 try:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 cat = eval(category)
15611
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
140 except NameError:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
141 raise _OptionError("unknown warning category: %r" % (category,))
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 else:
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 i = category.rfind(".")
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 module = category[:i]
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 klass = category[i+1:]
15611
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
146 try:
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
147 m = __import__(module, None, None, [klass])
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
148 except ImportError:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
149 raise _OptionError("invalid module name: %r" % (module,))
15611
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
150 try:
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
151 cat = getattr(m, klass)
2fe7427591ea Improve error messages for invalid warning arguments; don't raise
Guido van Rossum <guido@python.org>
parents: 15592
diff changeset
152 except AttributeError:
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
153 raise _OptionError("unknown warning category: %r" % (category,))
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38453
diff changeset
154 if not issubclass(cat, Warning):
31515
71a294bd7950 Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents: 29813
diff changeset
155 raise _OptionError("invalid warning category: %r" % (category,))
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 return cat
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
157
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
158
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
159 # Code typically replaced by _warnings
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
160 def warn(message, category=None, stacklevel=1):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
161 """Issue a warning, or maybe ignore it or raise an exception."""
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
162 # Check if message is already a Warning object
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
163 if isinstance(message, Warning):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
164 category = message.__class__
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
165 # Check category argument
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
166 if category is None:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
167 category = UserWarning
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
168 assert issubclass(category, Warning)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
169 # Get context information
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
170 try:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
171 caller = sys._getframe(stacklevel)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
172 except ValueError:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
173 globals = sys.__dict__
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
174 lineno = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
175 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
176 globals = caller.f_globals
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
177 lineno = caller.f_lineno
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
178 if '__name__' in globals:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
179 module = globals['__name__']
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
180 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
181 module = "<string>"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
182 filename = globals.get('__file__')
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
183 if filename:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
184 fnl = filename.lower()
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
185 if fnl.endswith((".pyc", ".pyo")):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
186 filename = filename[:-1]
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
187 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
188 if module == "__main__":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
189 try:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
190 filename = sys.argv[0]
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
191 except AttributeError:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
192 # embedded interpreters don't have sys.argv, see bug #839151
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
193 filename = '__main__'
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
194 if not filename:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
195 filename = module
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
196 registry = globals.setdefault("__warningregistry__", {})
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
197 warn_explicit(message, category, filename, lineno, module, registry,
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
198 globals)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
199
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
200 def warn_explicit(message, category, filename, lineno,
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
201 module=None, registry=None, module_globals=None):
48371
605ab6f92838 Merged revisions 64549 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 46708
diff changeset
202 lineno = int(lineno)
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
203 if module is None:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
204 module = filename or "<unknown>"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
205 if module[-3:].lower() == ".py":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
206 module = module[:-3] # XXX What about leading pathname?
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
207 if registry is None:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
208 registry = {}
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
209 if isinstance(message, Warning):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
210 text = str(message)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
211 category = message.__class__
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
212 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
213 text = message
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
214 message = category(message)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
215 key = (text, category, lineno)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
216 # Quick test for common case
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
217 if registry.get(key):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
218 return
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
219 # Search the filters
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
220 for item in filters:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
221 action, msg, cat, mod, ln = item
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
222 if ((msg is None or msg.match(text)) and
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
223 issubclass(category, cat) and
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
224 (mod is None or mod.match(module)) and
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
225 (ln == 0 or lineno == ln)):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
226 break
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
227 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
228 action = defaultaction
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
229 # Early exit actions
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
230 if action == "ignore":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
231 registry[key] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
232 return
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
233
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
234 # Prime the linecache for formatting, in case the
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
235 # "file" is actually in a zipfile or something.
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
236 linecache.getlines(filename, module_globals)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
237
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
238 if action == "error":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
239 raise message
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
240 # Other actions
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
241 if action == "once":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
242 registry[key] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
243 oncekey = (text, category)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
244 if onceregistry.get(oncekey):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
245 return
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
246 onceregistry[oncekey] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
247 elif action == "always":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
248 pass
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
249 elif action == "module":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
250 registry[key] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
251 altkey = (text, category, 0)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
252 if registry.get(altkey):
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
253 return
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
254 registry[altkey] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
255 elif action == "default":
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
256 registry[key] = 1
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
257 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
258 # Unrecognized actions are errors
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
259 raise RuntimeError(
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
260 "Unrecognized action (%r) in warnings.filters:\n %s" %
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
261 (action, item))
73165
8e57b5d8f58f Closes #13258: Use callable() built-in in the standard library.
Florent Xicluna <florent.xicluna@gmail.com>
parents: 65624
diff changeset
262 if not callable(showwarning):
46708
74b9c85361f8 Merged revisions 62774-62775,62785,62787-62788 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46430
diff changeset
263 raise TypeError("warnings.showwarning() must be set to a "
74b9c85361f8 Merged revisions 62774-62775,62785,62787-62788 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 46430
diff changeset
264 "function or method")
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
265 # Print message and context
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
266 showwarning(message, category, filename, lineno)
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
267
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
268
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
269 class WarningMessage(object):
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
270
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
271 """Holds the result of a single showwarning() call."""
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
272
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
273 _WARNING_DETAILS = ("message", "category", "filename", "lineno", "file",
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
274 "line")
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
275
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
276 def __init__(self, message, category, filename, lineno, file=None,
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
277 line=None):
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
278 local_values = locals()
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
279 for attr in self._WARNING_DETAILS:
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
280 setattr(self, attr, local_values[attr])
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
281 self._category_name = category.__name__ if category else None
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
282
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
283 def __str__(self):
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
284 return ("{message : %r, category : %r, filename : %r, lineno : %s, "
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
285 "line : %r}" % (self.message, self._category_name,
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
286 self.filename, self.lineno, self.line))
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
287
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
288
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
289 class catch_warnings(object):
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
290
49100
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
291 """A context manager that copies and restores the warnings filter upon
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
292 exiting the context.
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
293
49100
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
294 The 'record' argument specifies whether warnings should be captured by a
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
295 custom implementation of warnings.showwarning() and be appended to a list
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
296 returned by the context manager. Otherwise None is returned by the context
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
297 manager. The objects appended to the list are arguments whose attributes
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
298 mirror the arguments to showwarning().
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
299
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
300 The 'module' argument is to specify an alternative module to the module
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
301 named 'warnings' and imported under that name. This argument is only useful
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
302 when testing the warnings module itself.
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
303
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
304 """
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
305
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
306 def __init__(self, *, record=False, module=None):
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
307 """Specify whether to record warnings and if an alternative module
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
308 should be used other than sys.modules['warnings'].
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
309
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
310 For compatibility with Python 3.0, please consider all arguments to be
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
311 keyword-only.
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
312
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
313 """
49100
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
314 self._record = record
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
315 self._module = sys.modules['warnings'] if module is None else module
49533
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
316 self._entered = False
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
317
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
318 def __repr__(self):
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
319 args = []
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
320 if self._record:
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
321 args.append("record=True")
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
322 if self._module is not sys.modules['warnings']:
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
323 args.append("module=%r" % self._module)
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
324 name = type(self).__name__
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
325 return "%s(%s)" % (name, ", ".join(args))
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
326
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
327 def __enter__(self):
49533
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
328 if self._entered:
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
329 raise RuntimeError("Cannot enter %r twice" % self)
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
330 self._entered = True
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
331 self._filters = self._module.filters
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
332 self._module.filters = self._filters[:]
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
333 self._showwarning = self._module.showwarning
49100
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
334 if self._record:
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
335 log = []
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
336 def showwarning(*args, **kwargs):
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
337 log.append(WarningMessage(*args, **kwargs))
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
338 self._module.showwarning = showwarning
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
339 return log
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
340 else:
3e6e565ee30a Merged revisions 66321 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents: 48952
diff changeset
341 return None
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
342
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
343 def __exit__(self, *exc_info):
49533
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
344 if not self._entered:
ca72271c624c forward port r66386
Benjamin Peterson <benjamin@python.org>
parents: 49100
diff changeset
345 raise RuntimeError("Cannot exit %r without entering first" % self)
48952
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
346 self._module.filters = self._filters
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
347 self._module.showwarning = self._showwarning
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
348
caa41e161b04 Merge in r66135. Doing also required removing a stale DeprecationWarning along
Brett Cannon <bcannon@gmail.com>
parents: 48699
diff changeset
349
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
350 # filters contains a sequence of filter 5-tuples
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
351 # The components of the 5-tuple are:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
352 # - an action: error, ignore, always, default, module, or once
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
353 # - a compiled regex that must match the warning message
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
354 # - a class representing the warning category
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
355 # - a compiled regex that must match the module that is being warned
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
356 # - a line number for the line being warning, or 0 to mean any line
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
357 # If either if the compiled regexs are None, match anything.
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
358 _warnings_defaults = False
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
359 try:
64438
1b5ee6e845cd _warnings exposed two variables with the name 'default_action' and
Brett Cannon <bcannon@gmail.com>
parents: 62582
diff changeset
360 from _warnings import (filters, _defaultaction, _onceregistry,
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
361 warn, warn_explicit)
64438
1b5ee6e845cd _warnings exposed two variables with the name 'default_action' and
Brett Cannon <bcannon@gmail.com>
parents: 62582
diff changeset
362 defaultaction = _defaultaction
1b5ee6e845cd _warnings exposed two variables with the name 'default_action' and
Brett Cannon <bcannon@gmail.com>
parents: 62582
diff changeset
363 onceregistry = _onceregistry
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
364 _warnings_defaults = True
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
365 except ImportError:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
366 filters = []
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
367 defaultaction = "default"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
368 onceregistry = {}
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
369
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
370
15592
52756f613c18 Python part of the warnings subsystem.
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 # Module initialization
31737
57965b2db20c SF bug 917108: warnings.py does not define _test().
Tim Peters <tim.peters@gmail.com>
parents: 31515
diff changeset
372 _processoptions(sys.warnoptions)
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
373 if not _warnings_defaults:
62582
4893e4009f56 Merged revisions 77402,77505,77510 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56894
diff changeset
374 silence = [ImportWarning, PendingDeprecationWarning]
4893e4009f56 Merged revisions 77402,77505,77510 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56894
diff changeset
375 silence.append(DeprecationWarning)
4893e4009f56 Merged revisions 77402,77505,77510 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56894
diff changeset
376 for cls in silence:
4893e4009f56 Merged revisions 77402,77505,77510 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 56894
diff changeset
377 simplefilter("ignore", category=cls)
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
378 bytes_warning = sys.flags.bytes_warning
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
379 if bytes_warning > 1:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
380 bytes_action = "error"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
381 elif bytes_warning:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
382 bytes_action = "default"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
383 else:
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
384 bytes_action = "ignore"
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
385 simplefilter(bytes_action, category=BytesWarning, append=1)
65624
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
386 # resource usage warnings are enabled by default in pydebug mode
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
387 if hasattr(sys, 'gettotalrefcount'):
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
388 resource_action = "always"
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
389 else:
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
390 resource_action = "ignore"
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
391 simplefilter(resource_action, category=ResourceWarning, append=1)
39b9e9de372b Add a new warning gategory, ResourceWarning, as discussed on python-dev. It is silent by default,
Georg Brandl <georg@python.org>
parents: 64438
diff changeset
392
46430
47d9bbe10897 Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 43577
diff changeset
393 del _warnings_defaults