Eliminate the deprecated option to return None instead of a tuple of arguments in __reduce__().

This commit is contained in:
Raymond Hettinger 2004-12-07 07:05:57 +00:00
parent 84667c063a
commit a6b45cc31d
4 changed files with 16 additions and 33 deletions

View 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

View 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

View File

@ -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.

View 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: