summaryrefslogtreecommitdiff
path: root/addons/web/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/http.py')
-rw-r--r--addons/web/http.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/addons/web/http.py b/addons/web/http.py
index 67d71ac7d37..2dc41c8cad9 100644
--- a/addons/web/http.py
+++ b/addons/web/http.py
@@ -121,6 +121,13 @@ class WebRequest(object):
# we use _ as seprator where RFC2616 uses '-'
self.lang = lang.replace('-', '_')
+ @contextlib.contextmanager
+ def registry_cr(self):
+ dbname = self.session._db or openerp.addons.web.controllers.main.db_monodb(self)
+ registry = openerp.modules.registry.RegistryManager.get(dbname.lower())
+ with registry.cursor() as cr:
+ yield (registry, cr)
+
def reject_nonliteral(dct):
if '__ref' in dct:
raise ValueError(
@@ -298,6 +305,8 @@ class HttpRequest(WebRequest):
#_logger.debug("%s --> %s.%s %r", self.httprequest.method, method.im_class.__name__, method.__name__, akw)
try:
r = method(**self.params)
+ except werkzeug.exceptions.HTTPException, e:
+ r = e
except Exception, e:
_logger.exception("An exception occured during an http request")
se = serialize_exception(e)
@@ -307,11 +316,13 @@ class HttpRequest(WebRequest):
'data': se
}
r = werkzeug.exceptions.InternalServerError(cgi.escape(simplejson.dumps(error)))
- if self.debug or 1:
- if isinstance(r, (werkzeug.wrappers.BaseResponse, werkzeug.exceptions.HTTPException)):
- _logger.debug('<-- %s', r)
- else:
- _logger.debug("<-- size: %s", len(r))
+ else:
+ if not r:
+ r = werkzeug.wrappers.Response(status=204) # no content
+ if isinstance(r, (werkzeug.wrappers.BaseResponse, werkzeug.exceptions.HTTPException)):
+ _logger.debug('<-- %s', r)
+ else:
+ _logger.debug("<-- size: %s", len(r))
return r
def make_response(self, data, headers=None, cookies=None):