- {% include data.template ignore missing %}
+ {% try "There was an error with the template {filename} at line number {lineno}: {exception}" %}{% include data.template ignore missing %}{% endtry %}
@@ -102,7 +102,7 @@
{% if "data_bind" in data %}data-bind="{{ data.data_bind }}"{% endif %}
{% if "styles_content" in data %} style="{{ data.styles_content|join(', ') }}" {% elif "styles" in data %} style="{{ data.styles|join(', ') }}" {% endif %}
>
- {% include data.template ignore missing %}
+ {% try "There was an error with the template {filename} at line number {lineno}: {exception}" %}{% include data.template ignore missing %}{% endtry %}
{% if "custom_bindings" not in data or data["custom_bindings"] %}{% endif %}
{% endfor %}
@@ -142,7 +142,7 @@
{% for key in templates.generic.order %}
{% set data = templates.generic.entries[key] %}
- {% include data.template ignore missing %}
+ {% try "" %}{% include data.template ignore missing %}{% endtry %}
{% endfor %}
diff --git a/src/octoprint/util/jinja.py b/src/octoprint/util/jinja.py
index 34954b88..ceace72e 100644
--- a/src/octoprint/util/jinja.py
+++ b/src/octoprint/util/jinja.py
@@ -87,56 +87,6 @@ class SelectedFilesLoader(BaseLoader):
return self.files.keys()
-class ExceptionHandlerExtension(Extension):
- tags = {"try"}
-
- def __init__(self, environment):
- super(ExceptionHandlerExtension, self).__init__(environment)
- self._logger = logging.getLogger(__name__)
-
- def parse(self, parser):
- token = parser.stream.next()
- lineno = token.lineno
- filename = parser.name
- error = parser.parse_expression()
-
- args = [error, nodes.Const(filename), nodes.Const(lineno)]
- try:
- body = parser.parse_statements(["name:endtry"], drop_needle=True)
- node = nodes.CallBlock(self.call_method("_handle_body", args),
- [], [], body).set_lineno(lineno)
- except Exception as e:
- # that was expected
- self._logger.exception("Caught exception while parsing template")
- node = nodes.CallBlock(self.call_method("_handle_error", [nodes.Const(self._format_error(error, e, filename, lineno))]),
- [], [], []).set_lineno(lineno)
-
- return node
-
- def _handle_body(self, error, filename, lineno, caller):
- try:
- return caller()
- except Exception as e:
- self._logger.exception("Caught exception while compiling template {filename} at line {lineno}".format(**locals()))
- error_string = self._format_error(error, e, filename, lineno)
- return error_string if error_string else ""
-
- def _handle_error(self, error, caller):
- return error if error else ""
-
- def _format_error(self, error, exception, filename, lineno):
- if not error:
- return ""
-
- try:
- return error.format(exception=exception, filename=filename, lineno=lineno)
- except:
- self._logger.exception("Error while compiling exception output for template {filename} at line {lineno}".format(**locals()))
- return "Unknown error"
-
-trycatch = ExceptionHandlerExtension
-
-
def get_all_template_paths(loader):
def walk_folder(folder):
files = []
@@ -196,3 +146,53 @@ def get_all_asset_paths(env):
# intentionally ignored
pass
return result
+
+
+class ExceptionHandlerExtension(Extension):
+ tags = {"try"}
+
+ def __init__(self, environment):
+ super(ExceptionHandlerExtension, self).__init__(environment)
+ self._logger = logging.getLogger(__name__)
+
+ def parse(self, parser):
+ token = parser.stream.next()
+ lineno = token.lineno
+ filename = parser.name
+ error = parser.parse_expression()
+
+ args = [error, nodes.Const(filename), nodes.Const(lineno)]
+ try:
+ body = parser.parse_statements(["name:endtry"], drop_needle=True)
+ node = nodes.CallBlock(self.call_method("_handle_body", args),
+ [], [], body).set_lineno(lineno)
+ except Exception as e:
+ # that was expected
+ self._logger.exception("Caught exception while parsing template")
+ node = nodes.CallBlock(self.call_method("_handle_error", [nodes.Const(self._format_error(error, e, filename, lineno))]),
+ [], [], []).set_lineno(lineno)
+
+ return node
+
+ def _handle_body(self, error, filename, lineno, caller):
+ try:
+ return caller()
+ except Exception as e:
+ self._logger.exception("Caught exception while compiling template {filename} at line {lineno}".format(**locals()))
+ error_string = self._format_error(error, e, filename, lineno)
+ return error_string if error_string else ""
+
+ def _handle_error(self, error, caller):
+ return error if error else ""
+
+ def _format_error(self, error, exception, filename, lineno):
+ if not error:
+ return ""
+
+ try:
+ return error.format(exception=exception, filename=filename, lineno=lineno)
+ except:
+ self._logger.exception("Error while compiling exception output for template {filename} at line {lineno}".format(**locals()))
+ return "Unknown error"
+
+trycatch = ExceptionHandlerExtension