Allow getting number of available states in template (#9158)

pull/9170/head
Paulus Schoutsen 2017-08-27 09:33:25 -07:00 committed by Pascal Vizeli
parent c367021aa4
commit 5629157740
2 changed files with 22 additions and 0 deletions

View File

@ -187,6 +187,10 @@ class AllStates(object):
sorted(self._hass.states.async_all(),
key=lambda state: state.entity_id))
def __len__(self):
"""Return number of states."""
return len(self._hass.states.async_entity_ids())
def __call__(self, entity_id):
"""Return the states."""
state = self._hass.states.get(entity_id)
@ -213,6 +217,10 @@ class DomainStates(object):
if state.domain == self._domain),
key=lambda state: state.entity_id))
def __len__(self):
"""Return number of states."""
return len(self._hass.states.async_entity_ids(self._domain))
class TemplateState(State):
"""Class to represent a state object in a template."""

View File

@ -782,3 +782,17 @@ def test_state_with_unit(hass):
hass)
assert tpl.async_render() == ''
@asyncio.coroutine
def test_length_of_states(hass):
"""Test fetching the length of states."""
hass.states.async_set('sensor.test', '23')
hass.states.async_set('sensor.test2', 'wow')
hass.states.async_set('climate.test2', 'cooling')
tpl = template.Template('{{ states | length }}', hass)
assert tpl.async_render() == '3'
tpl = template.Template('{{ states.sensor | length }}', hass)
assert tpl.async_render() == '2'