Mercurial > piecrust2
comparison piecrust/templating/jinjaengine.py @ 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 | 6ca1b6fb9964 |
| children | cf3218766fe2 |
comparison
equal
deleted
inserted
replaced
| 523:b22e69ff54f4 | 524:4bca25f99463 |
|---|---|
| 51 | 51 |
| 52 try: | 52 try: |
| 53 return tpl.render(data) | 53 return tpl.render(data) |
| 54 except TemplateSyntaxError as tse: | 54 except TemplateSyntaxError as tse: |
| 55 raise self._getTemplatingError(tse) | 55 raise self._getTemplatingError(tse) |
| 56 except Exception as ex: | |
| 57 msg = "Error rendering Jinja markup" | |
| 58 rel_path = os.path.relpath(path, self.app.root_dir) | |
| 59 raise TemplatingError(msg, rel_path) from ex | |
| 56 | 60 |
| 57 def renderFile(self, paths, data): | 61 def renderFile(self, paths, data): |
| 58 self._ensureLoaded() | 62 self._ensureLoaded() |
| 59 tpl = None | 63 tpl = None |
| 60 logger.debug("Looking for template: %s" % paths) | 64 logger.debug("Looking for template: %s" % paths) |
| 65 rendered_path = None | |
| 61 for p in paths: | 66 for p in paths: |
| 62 try: | 67 try: |
| 63 tpl = self.env.get_template(p) | 68 tpl = self.env.get_template(p) |
| 69 rendered_path = p | |
| 64 break | 70 break |
| 65 except TemplateSyntaxError as tse: | 71 except TemplateSyntaxError as tse: |
| 66 raise self._getTemplatingError(tse) | 72 raise self._getTemplatingError(tse) |
| 67 except TemplateNotFound: | 73 except TemplateNotFound: |
| 68 pass | 74 pass |
| 72 | 78 |
| 73 try: | 79 try: |
| 74 return tpl.render(data) | 80 return tpl.render(data) |
| 75 except TemplateSyntaxError as tse: | 81 except TemplateSyntaxError as tse: |
| 76 raise self._getTemplatingError(tse) | 82 raise self._getTemplatingError(tse) |
| 83 except Exception as ex: | |
| 84 msg = "Error rendering Jinja markup" | |
| 85 rel_path = os.path.relpath(rendered_path, self.app.root_dir) | |
| 86 raise TemplatingError(msg, rel_path) from ex | |
| 77 | 87 |
| 78 def _getTemplatingError(self, tse, filename=None): | 88 def _getTemplatingError(self, tse, filename=None): |
| 79 filename = tse.filename or filename | 89 filename = tse.filename or filename |
| 80 if filename and os.path.isabs(filename): | 90 if filename and os.path.isabs(filename): |
| 81 filename = os.path.relpath(filename, self.env.app.root_dir) | 91 filename = os.path.relpath(filename, self.env.app.root_dir) |
