[FIX] report_xlsx: correctly handle exceptions, when generating report
Before this commit, when exception is raised while generating report, on browser window instead of python traceback nothing was shown on production environment or werkzeug's "Console locked" message on development environment.pull/554/head
parent
916ec9b71c
commit
e1aa558895
|
@ -3,7 +3,8 @@
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from odoo.http import content_disposition, request, route
|
from odoo.http import content_disposition, request, route, serialize_exception
|
||||||
|
from odoo.tools import html_escape
|
||||||
from odoo.tools.safe_eval import safe_eval
|
from odoo.tools.safe_eval import safe_eval
|
||||||
|
|
||||||
from odoo.addons.web.controllers import main as report
|
from odoo.addons.web.controllers import main as report
|
||||||
|
@ -13,6 +14,13 @@ class ReportController(report.ReportController):
|
||||||
@route()
|
@route()
|
||||||
def report_routes(self, reportname, docids=None, converter=None, **data):
|
def report_routes(self, reportname, docids=None, converter=None, **data):
|
||||||
if converter == "xlsx":
|
if converter == "xlsx":
|
||||||
|
return self._report_routes_xlsx(reportname, docids, converter, **data)
|
||||||
|
return super(ReportController, self).report_routes(
|
||||||
|
reportname, docids, converter, **data
|
||||||
|
)
|
||||||
|
|
||||||
|
def _report_routes_xlsx(self, reportname, docids=None, converter=None, **data):
|
||||||
|
try:
|
||||||
report = request.env["ir.actions.report"]._get_report_from_name(reportname)
|
report = request.env["ir.actions.report"]._get_report_from_name(reportname)
|
||||||
context = dict(request.env.context)
|
context = dict(request.env.context)
|
||||||
if docids:
|
if docids:
|
||||||
|
@ -42,6 +50,7 @@ class ReportController(report.ReportController):
|
||||||
("Content-Disposition", content_disposition(report_name + ".xlsx")),
|
("Content-Disposition", content_disposition(report_name + ".xlsx")),
|
||||||
]
|
]
|
||||||
return request.make_response(xlsx, headers=xlsxhttpheaders)
|
return request.make_response(xlsx, headers=xlsxhttpheaders)
|
||||||
return super(ReportController, self).report_routes(
|
except Exception as e:
|
||||||
reportname, docids, converter, **data
|
se = serialize_exception(e)
|
||||||
)
|
error = {"code": 200, "message": "Odoo Server Error", "data": se}
|
||||||
|
return request.make_response(html_escape(json.dumps(error)))
|
||||||
|
|
|
@ -5,3 +5,4 @@
|
||||||
* Graeme Gellatly <gdgellatly@gmail.com>
|
* Graeme Gellatly <gdgellatly@gmail.com>
|
||||||
* Cristian Salamea <cs@prisehub.com>
|
* Cristian Salamea <cs@prisehub.com>
|
||||||
* Rod Schouteden <rod.schouteden@dynapps.be>
|
* Rod Schouteden <rod.schouteden@dynapps.be>
|
||||||
|
* Eugene Molotov <molotov@it-projects.info>
|
||||||
|
|
Loading…
Reference in New Issue