Merge pull request #404 from stefan-jonasson/automation_confg_list

Automation confg lists
pull/412/head
Paulus Schoutsen 2015-09-19 20:53:26 -07:00
commit 85489010bc
2 changed files with 71 additions and 13 deletions

View File

@ -40,25 +40,45 @@ def setup(hass, config):
found = 1
while config_key in config:
p_config = _migrate_old_config(config[config_key])
# check for one block syntax
if isinstance(config[config_key], dict):
config_block = _migrate_old_config(config[config_key])
name = config_block.get(CONF_ALIAS, config_key)
_setup_automation(hass, config_block, name, config)
# check for multiple block syntax
elif isinstance(config[config_key], list):
for list_no, config_block in enumerate(config[config_key]):
name = config_block.get(CONF_ALIAS,
"{}, {}".format(config_key, list_no))
_setup_automation(hass, config_block, name, config)
# any scalar value is incorrect
else:
_LOGGER.error('Error in config in section %s.', config_key)
found += 1
config_key = "{} {}".format(DOMAIN, found)
name = p_config.get(CONF_ALIAS, config_key)
action = _get_action(hass, p_config.get(CONF_ACTION, {}), name)
return True
def _setup_automation(hass, config_block, name, config):
""" Setup one instance of automation """
action = _get_action(hass, config_block.get(CONF_ACTION, {}), name)
if action is None:
return False
if CONF_CONDITION in config_block or CONF_CONDITION_TYPE in config_block:
action = _process_if(hass, config, config_block, action)
if action is None:
continue
if CONF_CONDITION in p_config or CONF_CONDITION_TYPE in p_config:
action = _process_if(hass, config, p_config, action)
if action is None:
continue
_process_trigger(hass, config, p_config.get(CONF_TRIGGER, []), name,
action)
return False
_process_trigger(hass, config, config_block.get(CONF_TRIGGER, []), name,
action)
return True

View File

@ -340,3 +340,41 @@ class TestAutomation(unittest.TestCase):
self.hass.bus.fire('test_event')
self.hass.pool.block_till_done()
self.assertEqual(1, len(self.calls))
def test_automation_list_setting(self):
""" Event is not a valid condition. Will it still work? """
automation.setup(self.hass, {
automation.DOMAIN: [
{
'trigger': [
{
'platform': 'event',
'event_type': 'test_event',
},
],
'action': {
'execute_service': 'test.automation',
}
},
{
'trigger': [
{
'platform': 'event',
'event_type': 'test_event_2',
},
],
'action': {
'execute_service': 'test.automation',
}
}
]
})
self.hass.bus.fire('test_event')
self.hass.pool.block_till_done()
self.assertEqual(1, len(self.calls))
self.hass.bus.fire('test_event_2')
self.hass.pool.block_till_done()
self.assertEqual(2, len(self.calls))