[FIX] http: correctly handle the rollback when an exception is raised. Indeed dispathc serializes the exception, leading to the error being catched before we check and rollback the transaction. This commit fixes this.

bzr revid: tde@openerp.com-20131211112304-m2591t7endfetptc
This commit is contained in:
Thibault Delavallée 2013-12-11 12:23:04 +01:00
parent 44b7ede640
commit 1a16ecf8c2
1 changed files with 13 additions and 10 deletions

View File

@ -187,9 +187,16 @@ class WebRequest(object):
@service_model.check @service_model.check
def checked_call(dbname, *a, **kw): def checked_call(dbname, *a, **kw):
return self.func(*a, **kw) return self.func(*a, **kw)
# FIXME: code and rollback management could be cleaned
try:
if self.db: if self.db:
return checked_call(self.db, *args, **kwargs) return checked_call(self.db, *args, **kwargs)
return self.func(*args, **kwargs) return self.func(*args, **kwargs)
except Exception:
if self._cr:
self._cr.rollback()
raise
@property @property
def debug(self): def debug(self):
@ -401,11 +408,7 @@ class HttpRequest(WebRequest):
self.params = params self.params = params
def dispatch(self): def dispatch(self):
try:
r = self._call_function(**self.params) r = self._call_function(**self.params)
except (werkzeug.exceptions.HTTPException), e:
r = e
else:
if not r: if not r:
r = werkzeug.wrappers.Response(status=204) # no content r = werkzeug.wrappers.Response(status=204) # no content
return r return r