1
0
mirror of https://github.com/django/django.git synced 2025-02-01 05:10:04 +00:00

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.
This commit is contained in:
Simon Charette 2018-11-23 21:18:47 -05:00 committed by Mariusz Felisiak
parent 0e3b0da2e3
commit 1dd96f731d
2 changed files with 5 additions and 9 deletions

View File

@ -1,8 +1,6 @@
""" """
Various complex queries that have been problematic in the past. Various complex queries that have been problematic in the past.
""" """
import threading
from django.db import models from django.db import models
from django.db.models.functions import Now from django.db.models.functions import Now
@ -51,13 +49,6 @@ class Note(models.Model):
def __str__(self): def __str__(self):
return self.note 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): class Annotation(models.Model):
name = models.CharField(max_length=10) name = models.CharField(max_length=10)

View File

@ -3,6 +3,7 @@ import pickle
import sys import sys
import unittest import unittest
from operator import attrgetter from operator import attrgetter
from threading import Lock
from django.core.exceptions import EmptyResultSet, FieldError from django.core.exceptions import EmptyResultSet, FieldError
from django.db import DEFAULT_DB_ALIAS, connection from django.db import DEFAULT_DB_ALIAS, connection
@ -2198,6 +2199,10 @@ class CloneTests(TestCase):
n_list = Note.objects.all() n_list = Note.objects.all()
# Evaluate the Note queryset, populating the query cache # Evaluate the Note queryset, populating the query cache
list(n_list) 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 # Use the note queryset in a query, and evaluate
# that query in a way that involves cloning. # that query in a way that involves cloning.
self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good') self.assertEqual(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')