diff options
| author | Marc Tamlyn <marc.tamlyn@gmail.com> | 2013-05-20 00:26:06 -0700 |
|---|---|---|
| committer | Marc Tamlyn <marc.tamlyn@gmail.com> | 2013-05-20 00:26:06 -0700 |
| commit | 6d81d5d82e8666b26a207b0a721f0da6e620c302 (patch) | |
| tree | b44ba9386f256efa451be358c7ae1e7fbf23d94b /django | |
| parent | a7dc13ec231faf917c3125eb4c158138d4edde10 (diff) | |
| parent | 6633eeb88634aa8c03c8737d2d23c96b96a37e0d (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.py | 9 | ||||
| -rw-r--r-- | django/db/transaction.py | 17 |
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 # ############################################ |
