mirror of
				https://github.com/python/cpython.git
				synced 2025-10-26 19:24:34 +00:00 
			
		
		
		
	bpo-34204: Use pickle.DEFAULT_PROTOCOL in shelve (GH-19639)
Use pickle.DEFAULT_PROTOCOL (currently 5) in shelve instead of a hardcoded 3.
This commit is contained in:
		
							parent
							
								
									4173320920
								
							
						
					
					
						commit
						df59273c7a
					
				
					 5 changed files with 29 additions and 8 deletions
				
			
		|  | @ -25,8 +25,9 @@ lots of shared  sub-objects.  The keys are ordinary strings. | ||||||
|    database file is opened for reading and writing.  The optional *flag* parameter |    database file is opened for reading and writing.  The optional *flag* parameter | ||||||
|    has the same interpretation as the *flag* parameter of :func:`dbm.open`. |    has the same interpretation as the *flag* parameter of :func:`dbm.open`. | ||||||
| 
 | 
 | ||||||
|    By default, version 3 pickles are used to serialize values.  The version of the |    By default, pickles created with :data:`pickle.DEFAULT_PROTOCOL` are used | ||||||
|    pickle protocol can be specified with the *protocol* parameter. |    to serialize values.  The version of the pickle protocol can be specified | ||||||
|  |    with the *protocol* parameter. | ||||||
| 
 | 
 | ||||||
|    Because of Python semantics, a shelf cannot know when a mutable |    Because of Python semantics, a shelf cannot know when a mutable | ||||||
|    persistent-dictionary entry is modified.  By default modified objects are |    persistent-dictionary entry is modified.  By default modified objects are | ||||||
|  | @ -40,6 +41,10 @@ lots of shared  sub-objects.  The keys are ordinary strings. | ||||||
|    determine which accessed entries are mutable, nor which ones were actually |    determine which accessed entries are mutable, nor which ones were actually | ||||||
|    mutated). |    mutated). | ||||||
| 
 | 
 | ||||||
|  |    .. versionchanged:: 3.10 | ||||||
|  |       :data:`pickle.DEFAULT_PROTOCOL` is now used as the default pickle | ||||||
|  |       protocol. | ||||||
|  | 
 | ||||||
|    .. note:: |    .. note:: | ||||||
| 
 | 
 | ||||||
|       Do not rely on the shelf being closed automatically; always call |       Do not rely on the shelf being closed automatically; always call | ||||||
|  | @ -108,9 +113,10 @@ Restrictions | ||||||
|    A subclass of :class:`collections.abc.MutableMapping` which stores pickled |    A subclass of :class:`collections.abc.MutableMapping` which stores pickled | ||||||
|    values in the *dict* object. |    values in the *dict* object. | ||||||
| 
 | 
 | ||||||
|    By default, version 3 pickles are used to serialize values.  The version of the |    By default, pickles created with :data:`pickle.DEFAULT_PROTOCOL` are used | ||||||
|    pickle protocol can be specified with the *protocol* parameter. See the |    to serialize values.  The version of the pickle protocol can be specified | ||||||
|    :mod:`pickle` documentation for a discussion of the pickle protocols. |    with the *protocol* parameter.  See the :mod:`pickle` documentation for a | ||||||
|  |    discussion of the pickle protocols. | ||||||
| 
 | 
 | ||||||
|    If the *writeback* parameter is ``True``, the object will hold a cache of all |    If the *writeback* parameter is ``True``, the object will hold a cache of all | ||||||
|    entries accessed and write them back to the *dict* at sync and close times. |    entries accessed and write them back to the *dict* at sync and close times. | ||||||
|  | @ -130,6 +136,10 @@ Restrictions | ||||||
|    .. versionchanged:: 3.4 |    .. versionchanged:: 3.4 | ||||||
|       Added context manager support. |       Added context manager support. | ||||||
| 
 | 
 | ||||||
|  |    .. versionchanged:: 3.10 | ||||||
|  |       :data:`pickle.DEFAULT_PROTOCOL` is now used as the default pickle | ||||||
|  |       protocol. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| .. class:: BsdDbShelf(dict, protocol=None, writeback=False, keyencoding='utf-8') | .. class:: BsdDbShelf(dict, protocol=None, writeback=False, keyencoding='utf-8') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -210,6 +210,13 @@ py_compile | ||||||
| Added ``--quiet`` option to command-line interface of :mod:`py_compile`. | Added ``--quiet`` option to command-line interface of :mod:`py_compile`. | ||||||
| (Contributed by Gregory Schevchenko in :issue:`38731`.) | (Contributed by Gregory Schevchenko in :issue:`38731`.) | ||||||
| 
 | 
 | ||||||
|  | shelve | ||||||
|  | ------ | ||||||
|  | 
 | ||||||
|  | The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default | ||||||
|  | instead of :mod:`pickle` protocol ``3`` when creating shelves. | ||||||
|  | (Contributed by Zackery Spytz in :issue:`34204`.) | ||||||
|  | 
 | ||||||
| sys | sys | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ | ||||||
| the persistent dictionary on disk, if feasible). | the persistent dictionary on disk, if feasible). | ||||||
| """ | """ | ||||||
| 
 | 
 | ||||||
| from pickle import Pickler, Unpickler | from pickle import DEFAULT_PROTOCOL, Pickler, Unpickler | ||||||
| from io import BytesIO | from io import BytesIO | ||||||
| 
 | 
 | ||||||
| import collections.abc | import collections.abc | ||||||
|  | @ -85,7 +85,7 @@ def __init__(self, dict, protocol=None, writeback=False, | ||||||
|                  keyencoding="utf-8"): |                  keyencoding="utf-8"): | ||||||
|         self.dict = dict |         self.dict = dict | ||||||
|         if protocol is None: |         if protocol is None: | ||||||
|             protocol = 3 |             protocol = DEFAULT_PROTOCOL | ||||||
|         self._protocol = protocol |         self._protocol = protocol | ||||||
|         self.writeback = writeback |         self.writeback = writeback | ||||||
|         self.cache = {} |         self.cache = {} | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| import unittest | import unittest | ||||||
| import shelve | import shelve | ||||||
| import glob | import glob | ||||||
|  | import pickle | ||||||
|  | 
 | ||||||
| from test import support | from test import support | ||||||
| from test.support import os_helper | from test.support import os_helper | ||||||
| from collections.abc import MutableMapping | from collections.abc import MutableMapping | ||||||
|  | @ -160,7 +162,7 @@ def test_with(self): | ||||||
| 
 | 
 | ||||||
|     def test_default_protocol(self): |     def test_default_protocol(self): | ||||||
|         with shelve.Shelf({}) as s: |         with shelve.Shelf({}) as s: | ||||||
|             self.assertEqual(s._protocol, 3) |             self.assertEqual(s._protocol, pickle.DEFAULT_PROTOCOL) | ||||||
| 
 | 
 | ||||||
| from test import mapping_tests | from test import mapping_tests | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default | ||||||
|  | instead of :mod:`pickle` protocol ``3``. | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Zackery Spytz
						Zackery Spytz