]> granicus.if.org Git - python/commitdiff
Eliminate the deprecated option to return None instead of a tuple of arguments in...
authorRaymond Hettinger <python@rcn.com>
Tue, 7 Dec 2004 07:05:57 +0000 (07:05 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 7 Dec 2004 07:05:57 +0000 (07:05 +0000)
Doc/lib/libpickle.tex
Lib/pickle.py
Misc/NEWS
Modules/cPickle.c

index 067f468809c4775e81538ebcaeb45a654387b2c1..4013432a91ff9b24ce17ec8cb3e97d530e092d75 100644 (file)
@@ -515,12 +515,8 @@ Otherwise, an \exception{UnpicklingError} will be raised in the
 unpickling environment.  Note that as usual, the callable itself is
 pickled by name.
 
-\item A tuple of arguments for the callable object, or \code{None}.
-\deprecated{2.3}{If this item is \code{None}, then instead of calling
-the callable directly, its \method{__basicnew__()} method is called
-without arguments; this method should also return the unpickled
-object.  Providing \code{None} is deprecated, however; return a
-tuple of arguments instead.}
+\item A tuple of arguments for the callable object.
+\versionchanged[Formerly, this argument could also be \code{None}]{2.5}
 
 \item Optionally, the object's state, which will be passed to
       the object's \method{__setstate__()} method as described in
index 4c9188830af746c013bf7f9e2d23cf16a17e91d1..02a1b1d1ae8cadca74a6a28b10fb5dedf875d178 100644 (file)
@@ -33,7 +33,6 @@ import marshal
 import sys
 import struct
 import re
-import warnings
 
 __all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
            "Unpickler", "dump", "dumps", "load", "loads"]
@@ -349,14 +348,7 @@ class Pickler:
 
         # Assert that args is a tuple or None
         if not isinstance(args, TupleType):
-            if args is None:
-                # A hack for Jim Fulton's ExtensionClass, now deprecated.
-                # See load_reduce()
-                warnings.warn("__basicnew__ special case is deprecated",
-                              DeprecationWarning)
-            else:
-                raise PicklingError(
-                    "args from reduce() should be a tuple")
+            raise PicklingError("args from reduce() should be a tuple")
 
         # Assert that func is callable
         if not callable(func):
@@ -1138,13 +1130,7 @@ class Unpickler:
         stack = self.stack
         args = stack.pop()
         func = stack[-1]
-        if args is None:
-            # A hack for Jim Fulton's ExtensionClass, now deprecated
-            warnings.warn("__basicnew__ special case is deprecated",
-                          DeprecationWarning)
-            value = func.__basicnew__()
-        else:
-            value = func(*args)
+        value = func(*args)
         stack[-1] = value
     dispatch[REDUCE] = load_reduce
 
index ffeb29b02cc9cfb37f2623a0ce6429866f864798..f619829399ed42a952f2b125480d4d2252b676af 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,6 +17,9 @@ Core and builtins
 Extension Modules
 -----------------
 
+- the cPickle module no longer accepts the deprecated None option in the
+  args tuple returned by __reduce__().
+
 - itertools.islice() now accepts None for the start and step arguments.
   This allows islice() to work more readily with slices:
       islice(s.start, s.stop, s.step)
@@ -25,6 +28,9 @@ Extension Modules
 Library
 -------
 
+- the pickle module no longer accepts the deprecated None option in the
+  args tuple returned by __reduce__().
+
 - optparse now optionally imports gettext.  This allows its use in setup.py.
 
 - the deprecated tzparse module was removed.
index dc987728f78a2f619be6ff44ec5d8b56a9ac5966..6af99ba5c690b30af4c4af571765349dee044768 100644 (file)
@@ -2143,6 +2143,12 @@ save_reduce(Picklerobject *self, PyObject *args, PyObject *ob)
                                &dictitems))
                return -1;
 
+       if (!PyTuple_Check(argtup)) {
+               PyErr_SetString(PicklingError,
+                               "args from reduce() should be a tuple");
+               return -1;
+       }
+
        if (state == Py_None)
                state = NULL;
        if (listitems == Py_None)
@@ -3616,17 +3622,6 @@ Instance_New(PyObject *cls, PyObject *args)
                else goto err;
        }
 
-       if (args==Py_None) {
-               /* Special case, call cls.__basicnew__() */
-               PyObject *basicnew;
-
-               basicnew = PyObject_GetAttr(cls, __basicnew___str);
-               if (!basicnew)  return NULL;
-               r=PyObject_CallObject(basicnew, NULL);
-               Py_DECREF(basicnew);
-               if (r) return r;
-       }
-
        if ((r=PyObject_CallObject(cls, args))) return r;
 
   err: