From 03e78b967e26e81d88f9dc24f17168655d7ffc89 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 24 May 2017 16:27:59 -0600 Subject: [PATCH 1/3] Rest notify data --- homeassistant/components/notify/rest.py | 35 ++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/notify/rest.py b/homeassistant/components/notify/rest.py index 1a40e1f18336e..586b7219e4643 100644 --- a/homeassistant/components/notify/rest.py +++ b/homeassistant/components/notify/rest.py @@ -15,6 +15,8 @@ from homeassistant.const import (CONF_RESOURCE, CONF_METHOD, CONF_NAME) import homeassistant.helpers.config_validation as cv +CONF_DATA = 'data' +CONF_DATA_TEMPLATE = 'data_template' CONF_MESSAGE_PARAMETER_NAME = 'message_param_name' CONF_TARGET_PARAMETER_NAME = 'target_param_name' CONF_TITLE_PARAMETER_NAME = 'title_param_name' @@ -34,6 +36,10 @@ default=DEFAULT_TARGET_PARAM_NAME): cv.string, vol.Optional(CONF_TITLE_PARAMETER_NAME, default=DEFAULT_TITLE_PARAM_NAME): cv.string, + vol.Optional(CONF_DATA, + default=None): dict, + vol.Optional(CONF_DATA_TEMPLATE, + default=None): { cv.match_all: cv.template_complex } }) _LOGGER = logging.getLogger(__name__) @@ -46,23 +52,28 @@ def get_service(hass, config, discovery_info=None): message_param_name = config.get(CONF_MESSAGE_PARAMETER_NAME) title_param_name = config.get(CONF_TITLE_PARAMETER_NAME) target_param_name = config.get(CONF_TARGET_PARAMETER_NAME) + data = config.get(CONF_DATA) + data_template = config.get(CONF_DATA_TEMPLATE) return RestNotificationService( - resource, method, message_param_name, title_param_name, - target_param_name) + hass, resource, method, message_param_name, + title_param_name, target_param_name, data, data_template) class RestNotificationService(BaseNotificationService): """Implementation of a notification service for REST.""" - def __init__(self, resource, method, message_param_name, title_param_name, - target_param_name): + def __init__(self, hass, resource, method, message_param_name, + title_param_name, target_param_name, data, data_template): """Initialize the service.""" self._resource = resource + self._hass = hass self._method = method.upper() self._message_param_name = message_param_name self._title_param_name = title_param_name self._target_param_name = target_param_name + self._data = data + self._data_template = data_template def send_message(self, message="", **kwargs): """Send a message to a user.""" @@ -79,6 +90,22 @@ def send_message(self, message="", **kwargs): # integrations, so just return the first target in the list. data[self._target_param_name] = kwargs[ATTR_TARGET][0] + if self._data: + data.update(self._data) + if self._data_template: + def _data_template_creator(value): + """Recursive template creator helper function.""" + if isinstance(value, list): + return [_data_template_creator(item) for item in value] + elif isinstance(value, dict): + return {key: _data_template_creator(item) + for key, item in value.items()} + value.hass = self._hass + return value.async_render(kwargs) + _LOGGER.info('Data Template; ' + str(self._data_template)) + data.update(_data_template_creator(self._data_template)) + + if self._method == 'POST': response = requests.post(self._resource, data=data, timeout=10) elif self._method == 'POST_JSON': From c6a1fe14aa29683b56fb224314b93543302beba1 Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 24 May 2017 16:28:53 -0600 Subject: [PATCH 2/3] Cleanup --- homeassistant/components/notify/rest.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/homeassistant/components/notify/rest.py b/homeassistant/components/notify/rest.py index 586b7219e4643..40fb2f681dcd5 100644 --- a/homeassistant/components/notify/rest.py +++ b/homeassistant/components/notify/rest.py @@ -92,7 +92,7 @@ def send_message(self, message="", **kwargs): if self._data: data.update(self._data) - if self._data_template: + elif self._data_template: def _data_template_creator(value): """Recursive template creator helper function.""" if isinstance(value, list): @@ -102,10 +102,8 @@ def _data_template_creator(value): for key, item in value.items()} value.hass = self._hass return value.async_render(kwargs) - _LOGGER.info('Data Template; ' + str(self._data_template)) data.update(_data_template_creator(self._data_template)) - if self._method == 'POST': response = requests.post(self._resource, data=data, timeout=10) elif self._method == 'POST_JSON': From 2b8a6fb865d65eb81dd50bea650d6f1df2d047da Mon Sep 17 00:00:00 2001 From: Teagan Glenn Date: Wed, 24 May 2017 16:33:30 -0600 Subject: [PATCH 3/3] Fix spaces --- homeassistant/components/notify/rest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/notify/rest.py b/homeassistant/components/notify/rest.py index 40fb2f681dcd5..19339a2c7ecc0 100644 --- a/homeassistant/components/notify/rest.py +++ b/homeassistant/components/notify/rest.py @@ -39,7 +39,7 @@ vol.Optional(CONF_DATA, default=None): dict, vol.Optional(CONF_DATA_TEMPLATE, - default=None): { cv.match_all: cv.template_complex } + default=None): {cv.match_all: cv.template_complex} }) _LOGGER = logging.getLogger(__name__)