Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
c292b3d1
Commit
c292b3d1
authored
Jun 08, 2015
by
hellysmile
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix set_rollback on @transaction.non_atomic_requests.
parent
6651432d
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
1 deletions
+34
-1
rest_framework/compat.py
+1
-0
tests/test_atomic_requests.py
+33
-1
No files found.
rest_framework/compat.py
View file @
c292b3d1
...
...
@@ -274,6 +274,7 @@ def 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.
...
...
tests/test_atomic_requests.py
View file @
c292b3d1
...
...
@@ -2,9 +2,10 @@ from __future__ import unicode_literals
from
django.db
import
connection
,
connections
,
transaction
from
django.test
import
TestCase
from
django.utils.decorators
import
method_decorator
from
django.utils.unittest
import
skipUnless
from
rest_framework
import
status
from
rest_framework.exceptions
import
APIException
from
rest_framework.exceptions
import
APIException
,
PermissionDenied
from
rest_framework.response
import
Response
from
rest_framework.test
import
APIRequestFactory
from
rest_framework.views
import
APIView
...
...
@@ -32,6 +33,16 @@ class APIExceptionView(APIView):
raise
APIException
class
NonAtomicAPIExceptionView
(
APIView
):
@method_decorator
(
transaction
.
non_atomic_requests
)
def
dispatch
(
self
,
*
args
,
**
kwargs
):
return
super
(
NonAtomicAPIExceptionView
,
self
)
.
dispatch
(
*
args
,
**
kwargs
)
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
BasicModel
.
objects
.
create
()
raise
PermissionDenied
@skipUnless
(
connection
.
features
.
uses_savepoints
,
"'atomic' requires transactions and savepoints."
)
class
DBTransactionTests
(
TestCase
):
...
...
@@ -108,3 +119,24 @@ class DBTransactionAPIExceptionTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
assert
BasicModel
.
objects
.
count
()
==
0
@skipUnless
(
connection
.
features
.
uses_savepoints
,
"'atomic' requires transactions and savepoints."
)
class
NonAtomicDBTransactionAPIExceptionTests
(
TestCase
):
def
setUp
(
self
):
self
.
view
=
NonAtomicAPIExceptionView
.
as_view
()
connections
.
databases
[
'default'
][
'ATOMIC_REQUESTS'
]
=
True
def
tearDown
(
self
):
connections
.
databases
[
'default'
][
'ATOMIC_REQUESTS'
]
=
False
def
test_api_exception_rollback_transaction_non_atomic_view
(
self
):
request
=
factory
.
post
(
'/'
)
response
=
self
.
view
(
request
)
# without checking connection.in_atomic_block view raises 500
# due attempt to rollback without transaction
self
.
assertEqual
(
response
.
status_code
,
status
.
HTTP_403_FORBIDDEN
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment