From 4e7cc110d9be778bf3e2a4857ada9d420b2a88c1 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sun, 22 Oct 2017 20:20:38 -0400 Subject: [PATCH] Fix no data event triggers (#10049) * Test including extra data on a no data trigger * Match any dicts for default schema for event data * Fix indentation * Only check schema if one was configured --- homeassistant/components/automation/event.py | 17 ++++++++++------- tests/components/automation/test_event.py | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/automation/event.py b/homeassistant/components/automation/event.py index 90baeaded14..20ea556f450 100644 --- a/homeassistant/components/automation/event.py +++ b/homeassistant/components/automation/event.py @@ -21,7 +21,7 @@ _LOGGER = logging.getLogger(__name__) TRIGGER_SCHEMA = vol.Schema({ vol.Required(CONF_PLATFORM): 'event', vol.Required(CONF_EVENT_TYPE): cv.string, - vol.Optional(CONF_EVENT_DATA, default={}): dict, + vol.Optional(CONF_EVENT_DATA): dict, }) @@ -31,16 +31,19 @@ def async_trigger(hass, config, action): event_type = config.get(CONF_EVENT_TYPE) event_data_schema = vol.Schema( config.get(CONF_EVENT_DATA), - extra=vol.ALLOW_EXTRA) + extra=vol.ALLOW_EXTRA) if CONF_EVENT_DATA in config else None @callback def handle_event(event): """Listen for events and calls the action when data matches.""" - try: - event_data_schema(event.data) - except vol.Invalid: - # If event data doesn't match requested schema, skip event - return + if event_data_schema: + # Check that the event data matches the configured + # schema if one was provided + try: + event_data_schema(event.data) + except vol.Invalid: + # If event data doesn't match requested schema, skip event + return hass.async_run_job(action, { 'trigger': { diff --git a/tests/components/automation/test_event.py b/tests/components/automation/test_event.py index bde34f7fb9f..e15b9112633 100644 --- a/tests/components/automation/test_event.py +++ b/tests/components/automation/test_event.py @@ -43,7 +43,7 @@ class TestAutomationEvent(unittest.TestCase): } }) - self.hass.bus.fire('test_event') + self.hass.bus.fire('test_event', {'extra_key': 'extra_data'}) self.hass.block_till_done() self.assertEqual(1, len(self.calls))