2
0
Эх сурвалжийг харах

Refs #13227 -- Adjusted a test to avoid making a shared test model unpickable.

This allowed the Note model to be used in setUpTestData() which requires
assigned model instances to be copy.deepcopy()'able.
Simon Charette 6 жил өмнө
parent
commit
1dd96f731d

+ 0 - 9
tests/queries/models.py

@@ -1,8 +1,6 @@
 """
 Various complex queries that have been problematic in the past.
 """
-import threading
-
 from django.db import models
 from django.db.models.functions import Now
 
@@ -51,13 +49,6 @@ class Note(models.Model):
     def __str__(self):
         return self.note
 
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-        # Regression for #13227 -- having an attribute that
-        # is unpicklable doesn't stop you from cloning queries
-        # that use objects of that type as an argument.
-        self.lock = threading.Lock()
-
 
 class Annotation(models.Model):
     name = models.CharField(max_length=10)

+ 5 - 0
tests/queries/tests.py

@@ -3,6 +3,7 @@ import pickle
 import sys
 import unittest
 from operator import attrgetter
+from threading import Lock
 
 from django.core.exceptions import EmptyResultSet, FieldError
 from django.db import DEFAULT_DB_ALIAS, connection
@@ -2198,6 +2199,10 @@ class CloneTests(TestCase):
         n_list = Note.objects.all()
         # Evaluate the Note queryset, populating the query cache
         list(n_list)
+        # Make one of cached results unpickable.
+        n_list._result_cache[0].lock = Lock()
+        with self.assertRaises(TypeError):
+            pickle.dumps(n_list)
         # Use the note queryset in a query, and evaluate
         # that query in a way that involves cloning.
         self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')