diff options
Diffstat (limited to 'addons/web/http.py')
| -rw-r--r-- | addons/web/http.py | 21 |
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): |
