diff options
| author | Adam Johnson <me@adamj.eu> | 2025-09-05 11:04:27 +0100 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2025-10-16 14:52:22 -0400 |
| commit | a321d961b03d47b7f0c2e21a2370fc9e74c1889b (patch) | |
| tree | b57a131d63215b60f0c6fbfd8cb5f3e35fcff6e9 /tests/queryset_pickle | |
| parent | e097e8a12f21a4e92594830f1ad1942b31916d0f (diff) | |
Refs #28586 -- Made fetch modes pickle as singletons.
This change ensures that we don’t create new instances of fetch modes
when pickling and unpickling, saving memory and preserving their singleton
nature.
Diffstat (limited to 'tests/queryset_pickle')
| -rw-r--r-- | tests/queryset_pickle/tests.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/queryset_pickle/tests.py b/tests/queryset_pickle/tests.py index acdb582a0a..074a8ed550 100644 --- a/tests/queryset_pickle/tests.py +++ b/tests/queryset_pickle/tests.py @@ -351,6 +351,29 @@ class PickleabilityTestCase(TestCase): event.edition_set.create() self.assert_pickles(event.edition_set.order_by("event")) + def test_fetch_mode_fetch_one(self): + restored = pickle.loads(pickle.dumps(self.happening)) + self.assertIs(restored._state.fetch_mode, models.FETCH_ONE) + + def test_fetch_mode_fetch_peers(self): + Happening.objects.create() + objs = list(Happening.objects.fetch_mode(models.FETCH_PEERS)) + self.assertEqual(objs[0]._state.fetch_mode, models.FETCH_PEERS) + self.assertEqual(len(objs[0]._state.peers), 2) + + restored = pickle.loads(pickle.dumps(objs)) + + self.assertIs(restored[0]._state.fetch_mode, models.FETCH_PEERS) + # Peers not restored because weak references are not picklable. + self.assertEqual(restored[0]._state.peers, ()) + + def test_fetch_mode_raise(self): + objs = list(Happening.objects.fetch_mode(models.RAISE)) + self.assertEqual(objs[0]._state.fetch_mode, models.RAISE) + + restored = pickle.loads(pickle.dumps(objs)) + self.assertIs(restored[0]._state.fetch_mode, models.RAISE) + class InLookupTests(TestCase): @classmethod |
