From 79afb0175bee4b363644518a920c258921b6196e Mon Sep 17 00:00:00 2001 From: miigotu <miigotu@gmail.com> Date: Tue, 12 Jan 2016 12:55:06 -0800 Subject: [PATCH] Add a custom error page when mako render fails --- gui/slick/views/500.mako | 25 +++++++++++++++++++++++++ sickbeard/webserve.py | 17 +++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 gui/slick/views/500.mako diff --git a/gui/slick/views/500.mako b/gui/slick/views/500.mako new file mode 100644 index 000000000..4a8547d4a --- /dev/null +++ b/gui/slick/views/500.mako @@ -0,0 +1,25 @@ +<%inherit file="/layouts/main.mako"/> + +<%block name="content"> +<h1 class="header">${header}</h1> +<p> +A mako error has occured.<br> +If this happened during an update a simple page refresh may be the solution.<br> +Mako errors that happen during updates may be a one time error if there were significant ui changes.<br> +</p> +<hr> +<a href="#mako-error" class="btn btn-default" data-toggle="collapse">Show/Hide Error</a> +<div id="mako-error" class="collapse"> +<br> +<div class="align-center"> +<pre> +<% filename, lineno, function, line = backtrace.traceback[-1] %> +File ${filename}:${lineno}, in ${function}: +% if line: +${line} +% endif +${str(backtrace.error.__class__.__name__)}: ${backtrace.error} +</pre> +</div> +</div> +</%block> diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index 3dc61b4a1..986e7b2a8 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -81,6 +81,7 @@ except ImportError: from mako.template import Template as MakoTemplate from mako.lookup import TemplateLookup +from mako.exceptions import RichTraceback from tornado.routes import route from tornado.web import RequestHandler, HTTPError, authenticated @@ -106,7 +107,11 @@ def get_lookup(): mako_cache = ek(os.path.join, sickbeard.CACHE_DIR, 'mako') if mako_lookup is None: use_strict = sickbeard.BRANCH and sickbeard.BRANCH != 'master' - mako_lookup = TemplateLookup(directories=[mako_path], module_directory=mako_cache, format_exceptions=True, strict_undefined=use_strict) + mako_lookup = TemplateLookup(directories=[mako_path], + module_directory=mako_cache, + # format_exceptions=True, + strict_undefined=use_strict, + filesystem_checks=True) return mako_lookup @@ -158,9 +163,13 @@ class PageTemplate(MakoTemplate): kwargs[key] = self.arguments[key] kwargs['makoStartTime'] = time.time() - - return self.template.render_unicode(*args, **kwargs) - + try: + return self.template.render_unicode(*args, **kwargs) + except Exception: + kwargs['title'] = '500' + kwargs['header'] = 'Mako Error' + kwargs['backtrace'] = RichTraceback() + return get_lookup().get_template('500.mako').render_unicode(*args, **kwargs) class BaseHandler(RequestHandler): startTime = 0. -- GitLab