Refs #31395 -- Removed support for assigning objects which don't support deepcopy() in setUpTestData().
Per deprecation timeline.
This commit is contained in:
parent
97237ad3fe
commit
2e10abeb7f
|
@ -1139,23 +1139,7 @@ class TestData:
|
||||||
if instance is None:
|
if instance is None:
|
||||||
return self.data
|
return self.data
|
||||||
memo = self.get_memo(instance)
|
memo = self.get_memo(instance)
|
||||||
try:
|
data = deepcopy(self.data, memo)
|
||||||
data = deepcopy(self.data, memo)
|
|
||||||
except TypeError:
|
|
||||||
# RemovedInDjango41Warning.
|
|
||||||
msg = (
|
|
||||||
"Assigning objects which don't support copy.deepcopy() during "
|
|
||||||
"setUpTestData() is deprecated. Either assign the %s "
|
|
||||||
"attribute during setUpClass() or setUp(), or add support for "
|
|
||||||
"deepcopy() to %s.%s.%s."
|
|
||||||
) % (
|
|
||||||
self.name,
|
|
||||||
owner.__module__,
|
|
||||||
owner.__qualname__,
|
|
||||||
self.name,
|
|
||||||
)
|
|
||||||
warnings.warn(msg, category=RemovedInDjango41Warning, stacklevel=2)
|
|
||||||
data = self.data
|
|
||||||
setattr(instance, self.name, data)
|
setattr(instance, self.name, data)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
|
@ -246,4 +246,6 @@ in Django 4.1.
|
||||||
See :ref:`deprecated-features-3.2` for details on these changes, including how
|
See :ref:`deprecated-features-3.2` for details on these changes, including how
|
||||||
to remove usage of these features.
|
to remove usage of these features.
|
||||||
|
|
||||||
* ...
|
* Support for assigning objects which don't support creating deep copies with
|
||||||
|
``copy.deepcopy()`` to class attributes in ``TestCase.setUpTestData()`` is
|
||||||
|
removed.
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
from django.db import IntegrityError, connections, transaction
|
from django.db import IntegrityError, connections, transaction
|
||||||
from django.test import TestCase, ignore_warnings, skipUnlessDBFeature
|
from django.test import TestCase, skipUnlessDBFeature
|
||||||
from django.test.testcases import TestData
|
from django.test.testcases import TestData
|
||||||
from django.utils.deprecation import RemovedInDjango41Warning
|
|
||||||
|
|
||||||
from .models import Car, Person, PossessedCar
|
from .models import Car, Person, PossessedCar
|
||||||
|
|
||||||
|
@ -54,11 +53,6 @@ class TestTestCase(TestCase):
|
||||||
self.reset_sequences = old_reset_sequences
|
self.reset_sequences = old_reset_sequences
|
||||||
|
|
||||||
|
|
||||||
class NonDeepCopyAble:
|
|
||||||
def __deepcopy__(self, memo):
|
|
||||||
raise TypeError
|
|
||||||
|
|
||||||
|
|
||||||
def assert_no_queries(test):
|
def assert_no_queries(test):
|
||||||
@wraps(test)
|
@wraps(test)
|
||||||
def inner(self):
|
def inner(self):
|
||||||
|
@ -79,7 +73,6 @@ class TestDataTests(TestCase):
|
||||||
car=cls.car,
|
car=cls.car,
|
||||||
belongs_to=cls.jim_douglas,
|
belongs_to=cls.jim_douglas,
|
||||||
)
|
)
|
||||||
cls.non_deepcopy_able = NonDeepCopyAble()
|
|
||||||
|
|
||||||
@assert_no_queries
|
@assert_no_queries
|
||||||
def test_class_attribute_equality(self):
|
def test_class_attribute_equality(self):
|
||||||
|
@ -104,21 +97,6 @@ class TestDataTests(TestCase):
|
||||||
self.assertIs(self.herbie.car, self.car)
|
self.assertIs(self.herbie.car, self.car)
|
||||||
self.assertIs(self.herbie.belongs_to, self.jim_douglas)
|
self.assertIs(self.herbie.belongs_to, self.jim_douglas)
|
||||||
|
|
||||||
@ignore_warnings(category=RemovedInDjango41Warning)
|
|
||||||
def test_undeepcopyable(self):
|
|
||||||
self.assertIs(self.non_deepcopy_able, self.__class__.non_deepcopy_able)
|
|
||||||
|
|
||||||
def test_undeepcopyable_warning(self):
|
|
||||||
msg = (
|
|
||||||
"Assigning objects which don't support copy.deepcopy() during "
|
|
||||||
"setUpTestData() is deprecated. Either assign the "
|
|
||||||
"non_deepcopy_able attribute during setUpClass() or setUp(), or "
|
|
||||||
"add support for deepcopy() to "
|
|
||||||
"test_utils.test_testcase.TestDataTests.non_deepcopy_able."
|
|
||||||
)
|
|
||||||
with self.assertRaisesMessage(RemovedInDjango41Warning, msg):
|
|
||||||
self.non_deepcopy_able
|
|
||||||
|
|
||||||
def test_repr(self):
|
def test_repr(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
repr(TestData('attr', 'value')),
|
repr(TestData('attr', 'value')),
|
||||||
|
|
Loading…
Reference in New Issue