Keep auto groups during group reload (#12841)

* Keep auto groups during group reload

* Make protected member public

* Add test
pull/12851/head
Anders Melchiorsen 2018-03-02 20:29:49 +01:00 committed by Paulus Schoutsen
parent 7937064fb7
commit dd67192057
2 changed files with 18 additions and 7 deletions

View File

@ -257,12 +257,16 @@ def async_setup(hass, config):
@asyncio.coroutine @asyncio.coroutine
def reload_service_handler(service): def reload_service_handler(service):
"""Remove all groups and load new ones from config.""" """Remove all user-defined groups and load new ones from config."""
auto = list(filter(lambda e: not e.user_defined, component.entities))
conf = yield from component.async_prepare_reload() conf = yield from component.async_prepare_reload()
if conf is None: if conf is None:
return return
yield from _async_process_config(hass, conf, component) yield from _async_process_config(hass, conf, component)
yield from component.async_add_entities(auto)
hass.services.async_register( hass.services.async_register(
DOMAIN, SERVICE_RELOAD, reload_service_handler, DOMAIN, SERVICE_RELOAD, reload_service_handler,
schema=RELOAD_SERVICE_SCHEMA) schema=RELOAD_SERVICE_SCHEMA)
@ -407,7 +411,7 @@ class Group(Entity):
self.group_off = None self.group_off = None
self.visible = visible self.visible = visible
self.control = control self.control = control
self._user_defined = user_defined self.user_defined = user_defined
self._order = order self._order = order
self._assumed_state = False self._assumed_state = False
self._async_unsub_state_changed = None self._async_unsub_state_changed = None
@ -497,7 +501,7 @@ class Group(Entity):
ATTR_ENTITY_ID: self.tracking, ATTR_ENTITY_ID: self.tracking,
ATTR_ORDER: self._order, ATTR_ORDER: self._order,
} }
if not self._user_defined: if not self.user_defined:
data[ATTR_AUTO] = True data[ATTR_AUTO] = True
if self.view: if self.view:
data[ATTR_VIEW] = True data[ATTR_VIEW] = True

View File

@ -348,9 +348,15 @@ class TestComponentsGroup(unittest.TestCase):
'empty_group': {'name': 'Empty Group', 'entities': None}, 'empty_group': {'name': 'Empty Group', 'entities': None},
}}) }})
group.Group.create_group(
self.hass, 'all tests',
['test.one', 'test.two'],
user_defined=False)
assert sorted(self.hass.states.entity_ids()) == \ assert sorted(self.hass.states.entity_ids()) == \
['group.empty_group', 'group.second_group', 'group.test_group'] ['group.all_tests', 'group.empty_group', 'group.second_group',
assert self.hass.bus.listeners['state_changed'] == 2 'group.test_group']
assert self.hass.bus.listeners['state_changed'] == 3
with patch('homeassistant.config.load_yaml_config_file', return_value={ with patch('homeassistant.config.load_yaml_config_file', return_value={
'group': { 'group': {
@ -362,8 +368,9 @@ class TestComponentsGroup(unittest.TestCase):
group.reload(self.hass) group.reload(self.hass)
self.hass.block_till_done() self.hass.block_till_done()
assert self.hass.states.entity_ids() == ['group.hello'] assert sorted(self.hass.states.entity_ids()) == \
assert self.hass.bus.listeners['state_changed'] == 1 ['group.all_tests', 'group.hello']
assert self.hass.bus.listeners['state_changed'] == 2
def test_changing_group_visibility(self): def test_changing_group_visibility(self):
"""Test that a group can be hidden and shown.""" """Test that a group can be hidden and shown."""