Mercurial > piecrust2
diff piecrust/rendering.py @ 128:28444014ce7d
Fix error reporting and counting of lines.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 14 Nov 2014 22:49:50 +0100 |
parents | 0445a2232de7 |
children | 1c3d229158ba |
line wrap: on
line diff
--- a/piecrust/rendering.py Fri Nov 14 22:47:18 2014 +0100 +++ b/piecrust/rendering.py Fri Nov 14 22:49:50 2014 +0100 @@ -4,6 +4,7 @@ from piecrust.data.builder import (DataBuildingContext, build_page_data, build_layout_data) from piecrust.sources.base import PageSource +from piecrust.templating.base import TemplatingError from piecrust.uriutil import get_slug @@ -164,8 +165,14 @@ seg_text = '' for seg_part in seg.parts: part_format = seg_part.fmt or format_name - part_text = engine.renderString(seg_part.content, page_data, - filename=page.path, line_offset=seg_part.line) + try: + part_text = engine.renderString( + seg_part.content, page_data, + filename=page.path) + except TemplatingError as err: + err.lineno += seg_part.line + raise err + part_text = format_text(app, part_format, part_text) seg_text += part_text formatted_content[seg_name] = seg_text @@ -211,12 +218,19 @@ return engine return None -def format_text(app, format_name, txt): +def format_text(app, format_name, txt, exact_format=False): + if exact_format and not format_name: + raise Exception("You need to specify a format name.") + + format_count = 0 format_name = format_name or app.config.get('site/default_format') for fmt in app.plugin_loader.getFormatters(): if fmt.FORMAT_NAMES is None or format_name in fmt.FORMAT_NAMES: txt = fmt.render(format_name, txt) + format_count += 1 if fmt.OUTPUT_FORMAT is not None: format_name = fmt.OUTPUT_FORMAT + if exact_format and format_count == 0: + raise Exception("No such format: %s" % format_name) return txt