mirror of https://github.com/python/cpython
Eliminate the deprecated option to return None instead of a tuple of arguments in __reduce__().
This commit is contained in:
parent
84667c063a
commit
a6b45cc31d
|
@ -515,12 +515,8 @@ Otherwise, an \exception{UnpicklingError} will be raised in the
|
||||||
unpickling environment. Note that as usual, the callable itself is
|
unpickling environment. Note that as usual, the callable itself is
|
||||||
pickled by name.
|
pickled by name.
|
||||||
|
|
||||||
\item A tuple of arguments for the callable object, or \code{None}.
|
\item A tuple of arguments for the callable object.
|
||||||
\deprecated{2.3}{If this item is \code{None}, then instead of calling
|
\versionchanged[Formerly, this argument could also be \code{None}]{2.5}
|
||||||
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 Optionally, the object's state, which will be passed to
|
\item Optionally, the object's state, which will be passed to
|
||||||
the object's \method{__setstate__()} method as described in
|
the object's \method{__setstate__()} method as described in
|
||||||
|
|
|
@ -33,7 +33,6 @@ import marshal
|
||||||
import sys
|
import sys
|
||||||
import struct
|
import struct
|
||||||
import re
|
import re
|
||||||
import warnings
|
|
||||||
|
|
||||||
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
|
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
|
||||||
"Unpickler", "dump", "dumps", "load", "loads"]
|
"Unpickler", "dump", "dumps", "load", "loads"]
|
||||||
|
@ -349,14 +348,7 @@ class Pickler:
|
||||||
|
|
||||||
# Assert that args is a tuple or None
|
# Assert that args is a tuple or None
|
||||||
if not isinstance(args, TupleType):
|
if not isinstance(args, TupleType):
|
||||||
if args is None:
|
raise PicklingError("args from reduce() should be a tuple")
|
||||||
# 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")
|
|
||||||
|
|
||||||
# Assert that func is callable
|
# Assert that func is callable
|
||||||
if not callable(func):
|
if not callable(func):
|
||||||
|
@ -1138,12 +1130,6 @@ class Unpickler:
|
||||||
stack = self.stack
|
stack = self.stack
|
||||||
args = stack.pop()
|
args = stack.pop()
|
||||||
func = stack[-1]
|
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
|
stack[-1] = value
|
||||||
dispatch[REDUCE] = load_reduce
|
dispatch[REDUCE] = load_reduce
|
||||||
|
|
|
@ -17,6 +17,9 @@ Core and builtins
|
||||||
Extension Modules
|
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.
|
- itertools.islice() now accepts None for the start and step arguments.
|
||||||
This allows islice() to work more readily with slices:
|
This allows islice() to work more readily with slices:
|
||||||
islice(s.start, s.stop, s.step)
|
islice(s.start, s.stop, s.step)
|
||||||
|
@ -25,6 +28,9 @@ Extension Modules
|
||||||
Library
|
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.
|
- optparse now optionally imports gettext. This allows its use in setup.py.
|
||||||
|
|
||||||
- the deprecated tzparse module was removed.
|
- the deprecated tzparse module was removed.
|
||||||
|
|
|
@ -2143,6 +2143,12 @@ save_reduce(Picklerobject *self, PyObject *args, PyObject *ob)
|
||||||
&dictitems))
|
&dictitems))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (!PyTuple_Check(argtup)) {
|
||||||
|
PyErr_SetString(PicklingError,
|
||||||
|
"args from reduce() should be a tuple");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (state == Py_None)
|
if (state == Py_None)
|
||||||
state = NULL;
|
state = NULL;
|
||||||
if (listitems == Py_None)
|
if (listitems == Py_None)
|
||||||
|
@ -3616,17 +3622,6 @@ Instance_New(PyObject *cls, PyObject *args)
|
||||||
else goto err;
|
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;
|
if ((r=PyObject_CallObject(cls, args))) return r;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
|
Loading…
Reference in New Issue