]> granicus.if.org Git - python/commitdiff
The silencing of DeprecationWarning was not taking -3 into consideration. Since
authorBrett Cannon <bcannon@gmail.com>
Thu, 14 Jan 2010 20:00:28 +0000 (20:00 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 14 Jan 2010 20:00:28 +0000 (20:00 +0000)
Py3K warnings are DeprecationWarning by default this was causing -3 to
essentially be a no-op. Now DeprecationWarning is only silenced if -3 is not
used.

Closes issue #7700. Thanks Ezio Melotti and Florent Xicluna for patch help.

Lib/warnings.py
Misc/NEWS
Python/_warnings.c

index a88e7ba52bca8fcfeb1ce978750faca5f639be50..70b3d4361959309cfb3145e60a857281f7d2cf6d 100644 (file)
@@ -383,8 +383,11 @@ except ImportError:
 # Module initialization
 _processoptions(sys.warnoptions)
 if not _warnings_defaults:
-    for cls in (DeprecationWarning, PendingDeprecationWarning, ImportWarning):
-        simplefilter("ignore", category=cls, append=True)
+    silence = [ImportWarning, PendingDeprecationWarning]
+    if not sys.py3kwarning:  # Don't silence DeprecationWarning if -3 was used.
+        silence.append(DeprecationWarning)
+    for cls in silence:
+        simplefilter("ignore", category=cls)
     bytes_warning = sys.flags.bytes_warning
     if bytes_warning > 1:
         bytes_action = "error"
index 2f90b5e1583b46c983257452a98dd7e7e434af57..16f1cdb4f585555f747bd8307632c06cc5016ebe 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -21,7 +21,8 @@ Core and Builtins
   values.  Also fix a number of bugs in dtoa.c that could lead to
   incorrectly rounded results when converting strings to floats.
 
-- Issue #7319: Silence DeprecationWarning by default.
+- Issue #7319, #7770: Silence DeprecationWarning by default when -3 is not
+  used.
 
 - Issue #2335: Backport set literals syntax from Python 3.x.
 
index 96bb0493c99ca6b8f206c5a21b24bfe4fa4b2d75..f3b2286e69b35bbb16ac9d25e406ad8a4421f255 100644 (file)
@@ -839,31 +839,37 @@ create_filter(PyObject *category, const char *action)
 static PyObject *
 init_filters(void)
 {
-    PyObject *filters = PyList_New(4);
+    // Don't silence DeprecationWarning if -3 was used.
+    PyObject *filters = PyList_New(Py_Py3kWarningFlag ? 3 : 4);
+    unsigned int pos = 0;  // Post-incremented in each use.
+    unsigned int x;
     const char *bytes_action;
+
     if (filters == NULL)
         return NULL;
 
-    PyList_SET_ITEM(filters, 0,
-                    create_filter(PyExc_DeprecationWarning, "ignore"));
-    PyList_SET_ITEM(filters, 1,
+    if (!Py_Py3kWarningFlag) {
+        PyList_SET_ITEM(filters, pos++,
+                        create_filter(PyExc_DeprecationWarning, "ignore"));
+    }
+    PyList_SET_ITEM(filters, pos++,
                     create_filter(PyExc_PendingDeprecationWarning, "ignore"));
-    PyList_SET_ITEM(filters, 2, create_filter(PyExc_ImportWarning, "ignore"));
+    PyList_SET_ITEM(filters, pos++,
+                    create_filter(PyExc_ImportWarning, "ignore"));
     if (Py_BytesWarningFlag > 1)
         bytes_action = "error";
     else if (Py_BytesWarningFlag)
         bytes_action = "default";
     else
         bytes_action = "ignore";
-    PyList_SET_ITEM(filters, 3, create_filter(PyExc_BytesWarning,
+    PyList_SET_ITEM(filters, pos++, create_filter(PyExc_BytesWarning,
                     bytes_action));
 
-    if (PyList_GET_ITEM(filters, 0) == NULL ||
-        PyList_GET_ITEM(filters, 1) == NULL ||
-        PyList_GET_ITEM(filters, 2) == NULL ||
-        PyList_GET_ITEM(filters, 3) == NULL) {
-        Py_DECREF(filters);
-        return NULL;
+    for (x = 0; x < pos; x += 1) {
+        if (PyList_GET_ITEM(filters, x) == NULL) {
+            Py_DECREF(filters);
+            return NULL;
+        }
     }
 
     return filters;