mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-06-07 07:03:12 +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.conf import settings
|
||||||
from django.core import validators
|
from django.core import validators
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
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.utils import six
|
||||||
from django.views.generic import View
|
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.
|
# pytz is required from Django 1.11. Remove when dropping Django 1.10 support.
|
||||||
try:
|
try:
|
||||||
import pytz # noqa
|
import pytz # noqa
|
||||||
from pytz.exceptions import InvalidTimeError
|
from pytz.exceptions import InvalidTimeError
|
||||||
except ImportError:
|
except ImportError:
|
||||||
InvalidTimeError = Exception
|
InvalidTimeError = Exception
|
||||||
|
@ -297,23 +297,6 @@ class MaxLengthValidator(CustomValidatorMessage, validators.MaxLengthValidator):
|
||||||
pass
|
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):
|
def authenticate(request=None, **credentials):
|
||||||
from django.contrib.auth import authenticate
|
from django.contrib.auth import authenticate
|
||||||
if django.VERSION < (1, 11):
|
if django.VERSION < (1, 11):
|
||||||
|
|
|
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import PermissionDenied
|
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 import Http404
|
||||||
from django.http.response import HttpResponseBase
|
from django.http.response import HttpResponseBase
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
|
@ -16,7 +16,6 @@ from django.views.decorators.csrf import csrf_exempt
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
|
||||||
from rest_framework import exceptions, status
|
from rest_framework import exceptions, status
|
||||||
from rest_framework.compat import set_rollback
|
|
||||||
from rest_framework.request import Request
|
from rest_framework.request import Request
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.schemas import AutoSchema
|
from rest_framework.schemas import AutoSchema
|
||||||
|
@ -55,6 +54,12 @@ def get_view_description(view_cls, html=False):
|
||||||
return description
|
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):
|
def exception_handler(exc, context):
|
||||||
"""
|
"""
|
||||||
Returns the response that should be used for any given exception.
|
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