summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/lib/libpickle.tex8
-rw-r--r--Lib/pickle.py18
-rw-r--r--Misc/NEWS6
-rw-r--r--Modules/cPickle.c17
4 files changed, 16 insertions, 33 deletions
diff --git a/Doc/lib/libpickle.tex b/Doc/lib/libpickle.tex
index 067f468..4013432 100644
--- a/Doc/lib/libpickle.tex
+++ b/Doc/lib/libpickle.tex
@@ -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
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 4c91888..02a1b1d 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -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
diff --git a/Misc/NEWS b/Misc/NEWS
index ffeb29b..f619829 100644
--- 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.
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index dc98772..6af99ba 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -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: