By default, if an operation produces an undefined value (a Jinja2
concept that corresponds to Python's KeyError, AttributeError, etc)
then this value may be printed in a template, which is a nop. This
behavior can hide bugs.
This commit changes the Jinja2 behavior to raise an error instead of
producing an undefined value in all cases. (We produce undefined
values deliberately in a few places. Those are unaffected; it is OK
to use several kinds of undefined values in one Jinja2 environment.)
Fixes #337.
def render(source, origin, syntax=None):
try:
source = textwrap.dedent(source).strip()
- compiled = jinja2.Template(source, trim_blocks=True, lstrip_blocks=True)
+ compiled = jinja2.Template(source,
+ trim_blocks=True, lstrip_blocks=True, undefined=jinja2.StrictUndefined)
compiled.environment.filters["options"] = options
compiled.environment.filters["hierarchy"] = hierarchy
except jinja2.TemplateSyntaxError as e:
--log {{name}}.tim
{{platform._nextpnr_device_options[platform.device]}}
--package
- {{platform.package|lower}}{{platform._nextpnr_package_options[platform.device]}}
+ {{platform.package|lower}}{{platform._nextpnr_package_options[platform.device]|
+ default("")}}
--json {{name}}.json
--pcf {{name}}.pcf
--asc {{name}}.asc