From e15a7b4c6592eaed2d0d127e000ab35422686c8d Mon Sep 17 00:00:00 2001 From: Jeremy Kersten Date: Fri, 26 Jan 2018 10:59:19 +0100 Subject: [PATCH] [FIX] http: JsonRequest return code error as status code + Manage 404 error, avoiding tb in log and respecting status code in response request. --- odoo/http.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/odoo/http.py b/odoo/http.py index 56b1f8e6930..780521db857 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -629,8 +629,9 @@ class JsonRequest(WebRequest): body = json.dumps(response) return Response( - body, headers=[('Content-Type', mime), - ('Content-Length', len(body))]) + body, status=error and error.pop('http_status', 200) or 200, + headers=[('Content-Type', mime), ('Content-Length', len(body))] + ) def _handle_exception(self, exception): """Called within an except block to allow converting exceptions @@ -639,13 +640,18 @@ class JsonRequest(WebRequest): try: return super(JsonRequest, self)._handle_exception(exception) except Exception: - if not isinstance(exception, (odoo.exceptions.Warning, SessionExpiredException, odoo.exceptions.except_orm)): + if not isinstance(exception, (odoo.exceptions.Warning, SessionExpiredException, + odoo.exceptions.except_orm, werkzeug.exceptions.NotFound)): _logger.exception("Exception during JSON request handling.") error = { 'code': 200, 'message': "Odoo Server Error", 'data': serialize_exception(exception) } + if isinstance(exception, werkzeug.exceptions.NotFound): + error['http_status'] = 404 + error['code'] = 404 + error['message'] = "404: Not Found" if isinstance(exception, AuthenticationError): error['code'] = 100 error['message'] = "Odoo Session Invalid"