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
|
@ -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 @@ entries in the cache, and empty the cache (d.sync() also synchronizes
|
||||||
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 @@ class Shelf(collections.abc.MutableMapping):
|
||||||
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 @@ class TestCase(unittest.TestCase):
|
||||||
|
|
||||||
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…
Reference in New Issue