python - TransactionManagementError - This is forbidden when an 'atomic' block is active -
while upgrading project django 1.5.1 1.6.5, facing weird issue.
this forbidden when 'atomic' block active.
i aware of database transaction changes django 1.6 , made setting changes accordingly. works part, except when request.user object accessed.
the code, instance:
with transaction.atomic(): if hasattr(request, 'user') , getattr(request.user, 'id', none): #blah here stacktrace:
environment: request method: request url: <domain>/api/v1/browser_id/ django version: 1.6.5 python version: 2.7.3 <installed applications & middlewares snipped brevity> traceback: file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 112. response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/transaction.py" in inner 371. return func(*args, **kwargs) file "/home/kravindra/workspace/puppysite/puppy/kennel/views/etag_session.py" in browser_id 43. if hasattr(request, 'user') , getattr(request.user, 'id', none): file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/utils/functional.py" in inner 213. self._setup() file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/utils/functional.py" in _setup 298. self._wrapped = self._setupfunc() file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py" in <lambda> 18. request.user = simplelazyobject(lambda: get_user(request)) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py" in get_user 10. request._cached_user = auth.get_user(request) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in get_user 140. user_id = request.session[session_key] file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in __getitem__ 47. return self._session[key] file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in _get_session 173. self._session_cache = self.load() file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/cached_db.py" in load 52. self.create() file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in create 40. self.save(must_create=true) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/cached_db.py" in save 62. super(sessionstore, self).save(must_create) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in save 63. obj.save(force_insert=must_create, using=using) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/models/base.py" in save 545. force_update=force_update, update_fields=update_fields) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/models/base.py" in save_base 582. update_fields=update_fields, raw=raw, using=using) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/dispatch/dispatcher.py" in send 185. response = receiver(signal=self, sender=sender, **named) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/transaction.py" in inner 430. self: file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/transaction.py" in __enter__ 422. self.entering(self.using) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/transaction.py" in entering 483. enter_transaction_management(using=using) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/transaction.py" in enter_transaction_management 70. get_connection(using).enter_transaction_management(managed, forced) file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/backends/__init__.py" in enter_transaction_management 287. self.validate_no_atomic_block() file "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/db/backends/__init__.py" in validate_no_atomic_block 367. "this forbidden when 'atomic' block active.") exception type: transactionmanagementerror @ /api/v1/browser_id/ exception value: forbidden when 'atomic' block active. looking @ stacktrace,
/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-packages/django/contrib/sessions/backends/cached_db.py in load self.create() ... ▼ local vars variable value e doesnotexist('session matching query not exist.',) self <django.contrib.sessions.backends.cached_db.sessionstore object @ 0x7f61d401c6d0> data none sessionstore raises exception.
using postgres backend database. backend session store related settings are:
session_engine = 'django.contrib.sessions.backends.cached_db' #which persistent storage atomic_requests = true any pointers on how fix issue?
i found there bunch of questions on so, , blogposts address transactionmanagementerror issue in general, nothing address issue in particular
from traceback looks 1 of post_save signal receiver still using 1 of following deprecated transaction apis:
transaction.transactiontransaction.autocommittransaction.commit_on_successtransaction.commit_manuallycommit_on_success_unless_managed
make sure replace transaction.atomic instance instead , issue should go away.
let me know if have trouble finding culprit receiver.
Comments
Post a Comment