From 3aad223c955cdb586442c77944e3ffdfe8cf2858 Mon Sep 17 00:00:00 2001 From: pavoni Date: Tue, 2 Feb 2016 14:14:29 +0000 Subject: [PATCH 1/3] Change to warning if attributes missing. --- homeassistant/components/sensor/template.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/homeassistant/components/sensor/template.py b/homeassistant/components/sensor/template.py index b87e26aa415..fd2009b37e5 100644 --- a/homeassistant/components/sensor/template.py +++ b/homeassistant/components/sensor/template.py @@ -126,4 +126,9 @@ class SensorTemplate(Entity): self._state = template.render(self.hass, self._template) except TemplateError as ex: self._state = STATE_ERROR + if ex.args and ex.args[0].startswith( + "UndefinedError: 'None' has no attribute"): + # Common during HA startup - so just a trace + _LOGGER.info(ex) + return _LOGGER.error(ex) From 93a38d39eff3fb483805492c535c6921b57cc2ea Mon Sep 17 00:00:00 2001 From: pavoni Date: Tue, 2 Feb 2016 14:15:06 +0000 Subject: [PATCH 2/3] Add test for missimng attributes. --- tests/components/sensor/test_template.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tests/components/sensor/test_template.py b/tests/components/sensor/test_template.py index cc416e28f4e..96de2f6e875 100644 --- a/tests/components/sensor/test_template.py +++ b/tests/components/sensor/test_template.py @@ -26,19 +26,19 @@ class TestTemplateSensor: 'sensors': { 'test_template_sensor': { 'value_template': - "{{ states.sensor.test_state.state }}" + "It {{ states.sensor.test_state.state }}." } } } }) state = self.hass.states.get('sensor.test_template_sensor') - assert state.state == '' + assert state.state == 'It .' self.hass.states.set('sensor.test_state', 'Works') self.hass.pool.block_till_done() state = self.hass.states.get('sensor.test_template_sensor') - assert state.state == 'Works' + assert state.state == 'It Works.' def test_template_syntax_error(self): assert sensor.setup(self.hass, { @@ -58,6 +58,22 @@ class TestTemplateSensor: state = self.hass.states.get('sensor.test_template_sensor') assert state.state == 'error' + def test_template_attribute_missing(self): + assert sensor.setup(self.hass, { + 'sensor': { + 'platform': 'template', + 'sensors': { + 'test_template_sensor': { + 'value_template': + "It {{ states.sensor.test_state.attributes.missing }}." + } + } + } + }) + + state = self.hass.states.get('sensor.test_template_sensor') + assert state.state == 'error' + def test_invalid_name_does_not_create(self): assert sensor.setup(self.hass, { 'sensor': { From d344defc7ebccd77626eec276baba1746a673ff5 Mon Sep 17 00:00:00 2001 From: pavoni Date: Tue, 2 Feb 2016 16:26:17 +0000 Subject: [PATCH 3/3] Switch to warning. --- homeassistant/components/sensor/template.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/template.py b/homeassistant/components/sensor/template.py index fd2009b37e5..18701c19435 100644 --- a/homeassistant/components/sensor/template.py +++ b/homeassistant/components/sensor/template.py @@ -128,7 +128,7 @@ class SensorTemplate(Entity): self._state = STATE_ERROR if ex.args and ex.args[0].startswith( "UndefinedError: 'None' has no attribute"): - # Common during HA startup - so just a trace - _LOGGER.info(ex) + # Common during HA startup - so just a warning + _LOGGER.warning(ex) return _LOGGER.error(ex)