changeset 524:4bca25f99463

serve: Improve Jinja rendering error reporting. Some errors in Jinja are not wrapped in `TemplateSyntaxError` exceptions, so we have to wrap them ourselves to at least say what file it happened in.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 28 Jul 2015 21:25:08 -0700
parents b22e69ff54f4
children 4a26f3dfb92b
files piecrust/templating/jinjaengine.py
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/templating/jinjaengine.py	Tue Jul 28 21:24:10 2015 -0700
+++ b/piecrust/templating/jinjaengine.py	Tue Jul 28 21:25:08 2015 -0700
@@ -53,14 +53,20 @@
             return tpl.render(data)
         except TemplateSyntaxError as tse:
             raise self._getTemplatingError(tse)
+        except Exception as ex:
+            msg = "Error rendering Jinja markup"
+            rel_path = os.path.relpath(path, self.app.root_dir)
+            raise TemplatingError(msg, rel_path) from ex
 
     def renderFile(self, paths, data):
         self._ensureLoaded()
         tpl = None
         logger.debug("Looking for template: %s" % paths)
+        rendered_path = None
         for p in paths:
             try:
                 tpl = self.env.get_template(p)
+                rendered_path = p
                 break
             except TemplateSyntaxError as tse:
                 raise self._getTemplatingError(tse)
@@ -74,6 +80,10 @@
             return tpl.render(data)
         except TemplateSyntaxError as tse:
             raise self._getTemplatingError(tse)
+        except Exception as ex:
+            msg = "Error rendering Jinja markup"
+            rel_path = os.path.relpath(rendered_path, self.app.root_dir)
+            raise TemplatingError(msg, rel_path) from ex
 
     def _getTemplatingError(self, tse, filename=None):
         filename = tse.filename or filename