[IMP] website: catch exception of controller error to return a 401 or 500 error page (and log this exception).

bzr revid: chm@openerp.com-20131114144652-7ta05hrssx22cuiv
This commit is contained in:
Christophe Matthieu 2013-11-14 15:46:52 +01:00
parent 82818e3e04
commit cc574fa2c4
2 changed files with 19 additions and 5 deletions

View File

@ -52,7 +52,17 @@ def route(routes, *route_args, **route_kwargs):
request.website.preprocess_request(request)
if f.methods and request.httprequest.method not in f.methods:
return werkzeug.exceptions.MethodNotAllowed(valid_methods=f.methods)
return f(*args, **kwargs)
try:
return f(*args, **kwargs)
except Exception, err:
logger.exception("Website Rendering Error.")
if request.context['is_public_user']:
return request.website.render("website.401")
else:
return request.website.render("website.500", {
'traceback': traceback.format_exc(),
'controller': [f.__module__, "%s.%s" % (args[0].__class__.__name__, f.__name__)],
})
return wrap
return decorator

View File

@ -398,9 +398,10 @@
<h1 class="container mt32">500: Internal Server Error!</h1>
</div>
<t t-if="editable">
<h3>Exception in template: <span id="exception_template" t-esc="template"/></h3>
<h3 t-if="template">Exception in template: <span id="exception_template" t-esc="template"/></h3>
<h3 t-if="controller">Exception in controller: <span id="exception_controller" t-esc="controller[1]"/> <small>(Module: <span id="exception_module" t-esc="controller[0]"/>)</small> </h3>
<h4 t-if="expr">Expression: <t t-esc="expr"/></h4>
<pre id="exception_node" t-esc="node"/>
<t t-if="node"><pre id="exception_node" t-esc="node"/></t>
<pre id="exception_traceback" t-esc="traceback"/>
</t>
</div>
@ -415,11 +416,14 @@
<p>
The page you were looking for could not be
authorized.
</p><p>
</p>
<t t-if="error and editable">
<pre t-esc="error"/>
</t>
<p>
Maybe you were looking for one of these
popular pages ?
</p>
<pre t-if="editable" t-esc="error"/>
<ul>
<li><a href="/">Homepage</a></li>
<li><a href="/page/website.contactus/">Contact Us</a></li>