mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #32220 -- Added durable argument to transaction.atomic().
This commit is contained in:
committed by
Mariusz Felisiak
parent
8b040e3cbb
commit
3828879eee
@@ -1181,29 +1181,37 @@ class TestCase(TransactionTestCase):
|
||||
super().setUpClass()
|
||||
if not cls._databases_support_transactions():
|
||||
return
|
||||
cls.cls_atomics = cls._enter_atomics()
|
||||
|
||||
if cls.fixtures:
|
||||
for db_name in cls._databases_names(include_mirrors=False):
|
||||
try:
|
||||
call_command('loaddata', *cls.fixtures, **{'verbosity': 0, 'database': db_name})
|
||||
except Exception:
|
||||
cls._rollback_atomics(cls.cls_atomics)
|
||||
cls._remove_databases_failures()
|
||||
raise
|
||||
pre_attrs = cls.__dict__.copy()
|
||||
# Disable the durability check to allow testing durable atomic blocks
|
||||
# in a transaction for performance reasons.
|
||||
transaction.Atomic._ensure_durability = False
|
||||
try:
|
||||
cls.setUpTestData()
|
||||
cls.cls_atomics = cls._enter_atomics()
|
||||
|
||||
if cls.fixtures:
|
||||
for db_name in cls._databases_names(include_mirrors=False):
|
||||
try:
|
||||
call_command('loaddata', *cls.fixtures, **{'verbosity': 0, 'database': db_name})
|
||||
except Exception:
|
||||
cls._rollback_atomics(cls.cls_atomics)
|
||||
cls._remove_databases_failures()
|
||||
raise
|
||||
pre_attrs = cls.__dict__.copy()
|
||||
try:
|
||||
cls.setUpTestData()
|
||||
except Exception:
|
||||
cls._rollback_atomics(cls.cls_atomics)
|
||||
cls._remove_databases_failures()
|
||||
raise
|
||||
for name, value in cls.__dict__.items():
|
||||
if value is not pre_attrs.get(name):
|
||||
setattr(cls, name, TestData(name, value))
|
||||
except Exception:
|
||||
cls._rollback_atomics(cls.cls_atomics)
|
||||
cls._remove_databases_failures()
|
||||
transaction.Atomic._ensure_durability = True
|
||||
raise
|
||||
for name, value in cls.__dict__.items():
|
||||
if value is not pre_attrs.get(name):
|
||||
setattr(cls, name, TestData(name, value))
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
transaction.Atomic._ensure_durability = True
|
||||
if cls._databases_support_transactions():
|
||||
cls._rollback_atomics(cls.cls_atomics)
|
||||
for conn in connections.all():
|
||||
|
||||
Reference in New Issue
Block a user