From 28104c58d2457e2b74245a49e703d020cc2489df Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 27 Nov 2007 23:16:44 +0000 Subject: [PATCH] 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. --- Doc/library/warnings.rst | 8 ++++++++ Lib/new.py | 6 +++--- Lib/warnings.py | 10 ++++++++++ Misc/NEWS | 4 ++++ Python/sysmodule.c | 2 ++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst index 6049f5d4a7a..6188195c747 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 a3298b67ad5..1a5c11f2f34 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 b7fac699766..970d0ffade7 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 d0df601beb3..6af34e13056 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 774a7db89b5..617c38a2d75 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()));