summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMarc Tamlyn <marc.tamlyn@gmail.com>2013-05-20 00:26:06 -0700
committerMarc Tamlyn <marc.tamlyn@gmail.com>2013-05-20 00:26:06 -0700
commit6d81d5d82e8666b26a207b0a721f0da6e620c302 (patch)
treeb44ba9386f256efa451be358c7ae1e7fbf23d94b /django
parenta7dc13ec231faf917c3125eb4c158138d4edde10 (diff)
parent6633eeb88634aa8c03c8737d2d23c96b96a37e0d (diff)
Merge pull request #1181 from aaugustin/better-api-to-disable-atomic-requests
Changed API to disable ATOMIC_REQUESTS per view.
Diffstat (limited to 'django')
-rw-r--r--django/core/handlers/base.py9
-rw-r--r--django/db/transaction.py17
2 files changed, 22 insertions, 4 deletions
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index acc74db6f5..555fd98fc6 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -66,10 +66,11 @@ class BaseHandler(object):
self._request_middleware = request_middleware
def make_view_atomic(self, view):
- if getattr(view, 'transactions_per_request', True):
- for db in connections.all():
- if db.settings_dict['ATOMIC_REQUESTS']:
- view = transaction.atomic(using=db.alias)(view)
+ non_atomic_requests = getattr(view, '_non_atomic_requests', set())
+ for db in connections.all():
+ if (db.settings_dict['ATOMIC_REQUESTS']
+ and db.alias not in non_atomic_requests):
+ view = transaction.atomic(using=db.alias)(view)
return view
def get_response(self, request):
diff --git a/django/db/transaction.py b/django/db/transaction.py
index 48e7f900dd..f770f2efa7 100644
--- a/django/db/transaction.py
+++ b/django/db/transaction.py
@@ -333,6 +333,23 @@ def atomic(using=None, savepoint=True):
return Atomic(using, savepoint)
+def _non_atomic_requests(view, using):
+ try:
+ view._non_atomic_requests.add(using)
+ except AttributeError:
+ view._non_atomic_requests = set([using])
+ return view
+
+
+def non_atomic_requests(using=None):
+ if callable(using):
+ return _non_atomic_requests(using, DEFAULT_DB_ALIAS)
+ else:
+ if using is None:
+ using = DEFAULT_DB_ALIAS
+ return lambda view: _non_atomic_requests(view, using)
+
+
############################################
# Deprecated decorators / context managers #
############################################