mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Eliminate the deprecated option to return None instead of a tuple of arguments in __reduce__().
This commit is contained in:
		
							parent
							
								
									84667c063a
								
							
						
					
					
						commit
						a6b45cc31d
					
				
					 4 changed files with 16 additions and 33 deletions
				
			
		|  | @ -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 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 @@ def save_reduce(self, func, args, state=None, | ||||||
| 
 | 
 | ||||||
|         # 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 @@ def load_reduce(self): | ||||||
|         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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Raymond Hettinger
						Raymond Hettinger