Fail when rendering undefined objects in Jinja2 templates

By not successfully rendering unknown objects to an empty string
the caller provided error_value actually gets used.

This allows, for instance, the MQTT sensor to retain its state when an
unexpected or unwanted message (#2733/#3834) is received.
pull/3916/head
Jan Harkes 2016-10-13 13:39:49 -04:00
parent 18f5258aaf
commit c8add59ea5
2 changed files with 2 additions and 2 deletions
homeassistant
components/sensor

View File

@ -60,7 +60,7 @@ class MqttSensor(Entity):
"""A new MQTT message has been received."""
if value_template is not None:
payload = value_template.render_with_possible_json_value(
payload)
payload, self._state)
self._state = payload
self.update_ha_state()

View File

@ -402,7 +402,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
"""Test if callback is safe."""
return isinstance(obj, AllStates) or super().is_safe_callable(obj)
ENV = TemplateEnvironment()
ENV = TemplateEnvironment(undefined=jinja2.StrictUndefined)
ENV.filters['round'] = forgiving_round
ENV.filters['multiply'] = multiply
ENV.filters['timestamp_custom'] = timestamp_custom