[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
def checked_call(dbname, *a, **kw):
return self.func(*a, **kw)
if self.db:
return checked_call(self.db, *args, **kwargs)
return self.func(*args, **kwargs)
# FIXME: code and rollback management could be cleaned
try:
if self.db:
return checked_call(self.db, *args, **kwargs)
return self.func(*args, **kwargs)
except Exception:
if self._cr:
self._cr.rollback()
raise
@property
def debug(self):
@ -401,13 +408,9 @@ class HttpRequest(WebRequest):
self.params = params
def dispatch(self):
try:
r = self._call_function(**self.params)
except (werkzeug.exceptions.HTTPException), e:
r = e
else:
if not r:
r = werkzeug.wrappers.Response(status=204) # no content
r = self._call_function(**self.params)
if not r:
r = werkzeug.wrappers.Response(status=204) # no content
return r
def make_response(self, data, headers=None, cookies=None):