From a6b45cc31d33c166c84866f78d504a99d409895c Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 7 Dec 2004 07:05:57 +0000 Subject: Eliminate the deprecated option to return None instead of a tuple of arguments in __reduce__(). --- Doc/lib/libpickle.tex | 8 ++------ Lib/pickle.py | 18 ++---------------- Misc/NEWS | 6 ++++++ Modules/cPickle.c | 17 ++++++----------- 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: -- cgit v0.12