summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2007-11-27 23:16:44 (GMT)
committerChristian Heimes <christian@cheimes.de>2007-11-27 23:16:44 (GMT)
commit28104c58d2457e2b74245a49e703d020cc2489df (patch)
tree32607b7c0a2319ecff83e9ade5613a37d65a18d7
parent715ec1818de43836cffea50d5f4b5e53fc68a849 (diff)
downloadcpython-28104c58d2457e2b74245a49e703d020cc2489df.zip
cpython-28104c58d2457e2b74245a49e703d020cc2489df.tar.gz
cpython-28104c58d2457e2b74245a49e703d020cc2489df.tar.bz2
Expose Py_Py3kWarningFlag as sys.py3kwarning as discussed in #1504
Also added a warning.warnpy3k() as convenient method for Python 3.x related deprecation warnings.
-rw-r--r--Doc/library/warnings.rst8
-rw-r--r--Lib/new.py6
-rw-r--r--Lib/warnings.py10
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/sysmodule.c2
5 files changed, 27 insertions, 3 deletions
diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst
index 6049f5d..6188195 100644
--- a/Doc/library/warnings.rst
+++ b/Doc/library/warnings.rst
@@ -200,6 +200,14 @@ Available Functions
was added in Python 2.5.)
+.. function:: warnpy3k(message[, category[, stacklevel]])
+
+ Issue a warning related to Python 3.x deprecation. Warnings are only shown
+ when Python is started with the -3 option. Like func:`warn` *message* must
+ be a string and *category* a subclass of :exc:`Warning`. :func:`warnpy3k`
+ is using :exc:`DeprecationWarning` as default warning class.
+
+
.. function:: showwarning(message, category, filename, lineno[, file])
Write a warning to a file. The default implementation calls
diff --git a/Lib/new.py b/Lib/new.py
index a3298b6..1a5c11f 100644
--- a/Lib/new.py
+++ b/Lib/new.py
@@ -3,9 +3,9 @@
This module is no longer required except for backward compatibility.
Objects of most types can now be created by calling the type object.
"""
-from warnings import warn as _warn
-_warn("The 'new' module is not supported in 3.x, use the 'types' module "
- "instead.", DeprecationWarning, 2)
+from warnings import warnpy3k as _warnpy3k
+_warnpy3k("The 'new' module is not supported in 3.x, use the 'types' module "
+ "instead.", stacklevel=2)
from types import ClassType as classobj
from types import FunctionType as function
diff --git a/Lib/warnings.py b/Lib/warnings.py
index b7fac69..970d0ff 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -125,6 +125,16 @@ def warn_explicit(message, category, filename, lineno,
# Print message and context
showwarning(message, category, filename, lineno)
+def warnpy3k(message, category=None, stacklevel=1):
+ """Issue a deprecation warning for Python 3.x related changes.
+
+ Warnings are omitted unless Python is started with the -3 option.
+ """
+ if sys.py3kwarning:
+ if category is None:
+ category = DeprecationWarning
+ warn(message, category, stacklevel+1)
+
def showwarning(message, category, filename, lineno, file=None):
"""Hook to write a warning to a file; replace if you like."""
if file is None:
diff --git a/Misc/NEWS b/Misc/NEWS
index d0df601..6af34e1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1?
Core and builtins
-----------------
+- Expose the Py_Py3kWarningFlag as sys.py3kwarning.
+
- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
attribute of an empty cell object.
@@ -837,6 +839,8 @@ Library
Extension Modules
-----------------
+- Added warnpy3k function to the warnings module.
+
- Marshal.dumps() now expects exact type matches for int, long, float, complex,
tuple, list, dict, set, and frozenset. Formerly, it would silently miscode
subclasses of those types. Now, it raises a ValueError instead.
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 774a7db..617c38a 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1167,6 +1167,8 @@ _PySys_Init(void)
PyString_FromString(Py_GetExecPrefix()));
SET_SYS_FROM_STRING("maxint",
PyInt_FromLong(PyInt_GetMax()));
+ SET_SYS_FROM_STRING("py3kwarning",
+ PyBool_FromLong(Py_Py3kWarningFlag));
#ifdef Py_USING_UNICODE
SET_SYS_FROM_STRING("maxunicode",
PyInt_FromLong(PyUnicode_GetMax()));