summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/pickle.py9
-rw-r--r--Lib/test/test_pickle.py6
-rw-r--r--Misc/NEWS.d/next/Library/2024-11-06-13-41-38.gh-issue-126489.toaf-0.rst3
3 files changed, 14 insertions, 4 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 965e195..25dadb3 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -548,10 +548,11 @@ class _Pickler:
self.framer.commit_frame()
# Check for persistent id (defined by a subclass)
- pid = self.persistent_id(obj)
- if pid is not None and save_persistent_id:
- self.save_pers(pid)
- return
+ if save_persistent_id:
+ pid = self.persistent_id(obj)
+ if pid is not None:
+ self.save_pers(pid)
+ return
# Check the memo
x = self.memo.get(id(obj))
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
index c84e507..9ec2eb9 100644
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -224,25 +224,31 @@ class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests,
def test_pickler_super(self):
class PersPickler(self.pickler):
def persistent_id(subself, obj):
+ called.append(obj)
self.assertIsNone(super().persistent_id(obj))
return obj
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
f = io.BytesIO()
pickler = PersPickler(f, proto)
+ called = []
pickler.dump('abc')
+ self.assertEqual(called, ['abc'])
self.assertEqual(self.loads(f.getvalue()), 'abc')
def test_unpickler_super(self):
class PersUnpickler(self.unpickler):
def persistent_load(subself, pid):
+ called.append(pid)
with self.assertRaises(self.persistent_load_error):
super().persistent_load(pid)
return pid
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
unpickler = PersUnpickler(io.BytesIO(self.dumps('abc', proto)))
+ called = []
self.assertEqual(unpickler.load(), 'abc')
+ self.assertEqual(called, ['abc'])
class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests, unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Library/2024-11-06-13-41-38.gh-issue-126489.toaf-0.rst b/Misc/NEWS.d/next/Library/2024-11-06-13-41-38.gh-issue-126489.toaf-0.rst
new file mode 100644
index 0000000..8a6573c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-11-06-13-41-38.gh-issue-126489.toaf-0.rst
@@ -0,0 +1,3 @@
+The Python implementation of :mod:`pickle` no longer calls
+:meth:`pickle.Pickler.persistent_id` for the result of
+:meth:`!persistent_id`.