Skip to content
This repository has been archived by the owner on Jul 11, 2019. It is now read-only.

Commit

Permalink
Fix DetachedInstanceError after StatusCodeRedirect
Browse files Browse the repository at this point in the history
In certain cases, e.g. after an exception has been thrown, the database
session may be detached, but database objects managed by the orm are
still refered to from the same thread.

Such objects can be merged with the new db session, as described in
http://stackoverflow.com/a/9705458/201743

This is done with `c.user` which is re-retrieved from repoze.who after a
StatusCodeRedirect.

This fixes what ade22d7 works around.

See also discussion on: https://bitbucket.org/phihag/hhu-
adhocracy/issue/168/error-handler-causes-is-not-bound-to-a
  • Loading branch information
Nicolas Dietrich committed Feb 7, 2013
1 parent d300241 commit afa0273
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions adhocracy/lib/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ def __call__(self, environ, start_response):
else:
c.active_global_nav = 'home'
c.user = environ.get('repoze.who.identity', {}).get('user')
try:
if c.user and (c.user.banned or c.user.delete_time):
c.user = None
except DetachedInstanceError, e:
log.exception(e)

# make sure we're not using a detached user object
c.user = model.meta.Session.merge(c.user)

if c.user and (c.user.banned or c.user.delete_time):
c.user = None
c.active_controller = request.environ.get('pylons.routes_dict')\
.get('controller')
c.debug = asbool(config.get('debug'))
Expand Down

0 comments on commit afa0273

Please sign in to comment.