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.transaction
  • transaction.autocommit
  • transaction.commit_on_success
  • transaction.commit_manually
  • commit_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

Popular posts from this blog

java - How to specify maven bin in eclipse maven plugin? -

single sign on - Logging into Plone site with credentials passed through HTTP -

php - Why does AJAX not process login form? -