mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-10 19:56:59 +03:00
Remove set_rollback() from compat (#5591)
* Remove Django 1.6 transaction compat * Move set_rollback from compat => views
This commit is contained in:
parent
265375c104
commit
15024f3f07
|
@ -12,7 +12,7 @@ from django.apps import apps
|
|||
from django.conf import settings
|
||||
from django.core import validators
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.db import connection, models, transaction
|
||||
from django.db import models
|
||||
from django.utils import six
|
||||
from django.views.generic import View
|
||||
|
||||
|
@ -250,7 +250,7 @@ else:
|
|||
|
||||
# pytz is required from Django 1.11. Remove when dropping Django 1.10 support.
|
||||
try:
|
||||
import pytz # noqa
|
||||
import pytz # noqa
|
||||
from pytz.exceptions import InvalidTimeError
|
||||
except ImportError:
|
||||
InvalidTimeError = Exception
|
||||
|
@ -297,23 +297,6 @@ class MaxLengthValidator(CustomValidatorMessage, validators.MaxLengthValidator):
|
|||
pass
|
||||
|
||||
|
||||
def set_rollback():
|
||||
if hasattr(transaction, 'set_rollback'):
|
||||
if connection.settings_dict.get('ATOMIC_REQUESTS', False):
|
||||
# If running in >=1.6 then mark a rollback as required,
|
||||
# and allow it to be handled by Django.
|
||||
if connection.in_atomic_block:
|
||||
transaction.set_rollback(True)
|
||||
elif transaction.is_managed():
|
||||
# Otherwise handle it explicitly if in managed mode.
|
||||
if transaction.is_dirty():
|
||||
transaction.rollback()
|
||||
transaction.leave_transaction_management()
|
||||
else:
|
||||
# transaction not managed
|
||||
pass
|
||||
|
||||
|
||||
def authenticate(request=None, **credentials):
|
||||
from django.contrib.auth import authenticate
|
||||
if django.VERSION < (1, 11):
|
||||
|
|
|
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.db import models
|
||||
from django.db import connection, models, transaction
|
||||
from django.http import Http404
|
||||
from django.http.response import HttpResponseBase
|
||||
from django.utils import six
|
||||
|
@ -16,7 +16,6 @@ from django.views.decorators.csrf import csrf_exempt
|
|||
from django.views.generic import View
|
||||
|
||||
from rest_framework import exceptions, status
|
||||
from rest_framework.compat import set_rollback
|
||||
from rest_framework.request import Request
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.schemas import AutoSchema
|
||||
|
@ -55,6 +54,12 @@ def get_view_description(view_cls, html=False):
|
|||
return description
|
||||
|
||||
|
||||
def set_rollback():
|
||||
atomic_requests = connection.settings_dict.get('ATOMIC_REQUESTS', False)
|
||||
if atomic_requests and connection.in_atomic_block:
|
||||
transaction.set_rollback(True)
|
||||
|
||||
|
||||
def exception_handler(exc, context):
|
||||
"""
|
||||
Returns the response that should be used for any given exception.
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
from django.test import TestCase
|
||||
|
||||
from rest_framework import compat
|
||||
|
||||
|
||||
class CompatTests(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.original_django_version = compat.django.VERSION
|
||||
self.original_transaction = compat.transaction
|
||||
|
||||
def tearDown(self):
|
||||
compat.django.VERSION = self.original_django_version
|
||||
compat.transaction = self.original_transaction
|
||||
|
||||
def test_set_rollback_for_transaction_in_managed_mode(self):
|
||||
class MockTransaction(object):
|
||||
called_rollback = False
|
||||
called_leave_transaction_management = False
|
||||
|
||||
def is_managed(self):
|
||||
return True
|
||||
|
||||
def is_dirty(self):
|
||||
return True
|
||||
|
||||
def rollback(self):
|
||||
self.called_rollback = True
|
||||
|
||||
def leave_transaction_management(self):
|
||||
self.called_leave_transaction_management = True
|
||||
|
||||
dirty_mock_transaction = MockTransaction()
|
||||
compat.transaction = dirty_mock_transaction
|
||||
compat.set_rollback()
|
||||
assert dirty_mock_transaction.called_rollback is True
|
||||
assert dirty_mock_transaction.called_leave_transaction_management is True
|
||||
|
||||
clean_mock_transaction = MockTransaction()
|
||||
clean_mock_transaction.is_dirty = lambda: False
|
||||
compat.transaction = clean_mock_transaction
|
||||
compat.set_rollback()
|
||||
assert clean_mock_transaction.called_rollback is False
|
||||
assert clean_mock_transaction.called_leave_transaction_management is True
|
Loading…
Reference in New Issue
Block a user