From f40565f06a71d779c6be2487e67168a29d53db21 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sat, 20 May 2017 20:22:26 +0200 Subject: [PATCH 1/2] Sort entities in default groups by name --- homeassistant/helpers/entity_component.py | 12 +++++++----- tests/helpers/test_entity_component.py | 7 ++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/homeassistant/helpers/entity_component.py b/homeassistant/helpers/entity_component.py index 6e69f772d1eb9b..0b08b0ded66211 100644 --- a/homeassistant/helpers/entity_component.py +++ b/homeassistant/helpers/entity_component.py @@ -229,15 +229,17 @@ def async_update_group(self): This method must be run in the event loop. """ + def sorted_ids(): + """Return our entity ids sorted by entity name.""" + return sorted((ent_id for ent_id in self.entities.keys()), + key=lambda x: self.entities[x].name) + if self.group is None and self.group_name is not None: group = get_component('group') self.group = yield from group.Group.async_create_group( - self.hass, self.group_name, self.entities.keys(), - user_defined=False - ) + self.hass, self.group_name, sorted_ids(), user_defined=False) elif self.group is not None: - yield from self.group.async_update_tracked_entity_ids( - self.entities.keys()) + yield from self.group.async_update_tracked_entity_ids(sorted_ids()) def reset(self): """Remove entities and reset the entity component to initial values.""" diff --git a/tests/helpers/test_entity_component.py b/tests/helpers/test_entity_component.py index a76b3a15068c42..ade8c4ebd8ad15 100644 --- a/tests/helpers/test_entity_component.py +++ b/tests/helpers/test_entity_component.py @@ -92,13 +92,14 @@ def test_setting_up_group(self): assert group.attributes.get('entity_id') == ('test_domain.hello',) # group extended - component.add_entities([EntityTest(name='hello2')]) + component.add_entities([EntityTest(name='goodbye')]) assert len(self.hass.states.entity_ids()) == 3 group = self.hass.states.get('group.everyone') - assert sorted(group.attributes.get('entity_id')) == \ - ['test_domain.hello', 'test_domain.hello2'] + # Sorted order + assert group.attributes.get('entity_id') == \ + ('test_domain.goodbye', 'test_domain.hello') def test_polling_only_updates_entities_it_should_poll(self): """Test the polling of only updated entities.""" From 65c318035e621327872c051bc5449ea26c1fadcf Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sun, 21 May 2017 13:11:35 +0200 Subject: [PATCH 2/2] Cleanups from review --- homeassistant/helpers/entity_component.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/homeassistant/helpers/entity_component.py b/homeassistant/helpers/entity_component.py index 0b08b0ded66211..2c1801a634278e 100644 --- a/homeassistant/helpers/entity_component.py +++ b/homeassistant/helpers/entity_component.py @@ -229,17 +229,15 @@ def async_update_group(self): This method must be run in the event loop. """ - def sorted_ids(): - """Return our entity ids sorted by entity name.""" - return sorted((ent_id for ent_id in self.entities.keys()), - key=lambda x: self.entities[x].name) - if self.group is None and self.group_name is not None: group = get_component('group') self.group = yield from group.Group.async_create_group( - self.hass, self.group_name, sorted_ids(), user_defined=False) + self.hass, self.group_name, + sorted(self.entities, key=lambda x: self.entities[x].name), + user_defined=False) elif self.group is not None: - yield from self.group.async_update_tracked_entity_ids(sorted_ids()) + yield from self.group.async_update_tracked_entity_ids( + sorted(self.entities, key=lambda x: self.entities[x].name)) def reset(self): """Remove entities and reset the entity component to initial values."""