From 5cffe5ac817323026d84ed3d2861a0e83f8b8f1e Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 16 Feb 2022 18:13:06 +0100 Subject: [PATCH 1/3] Allow extra in service call data --- homeassistant/const.py | 1 + homeassistant/helpers/config_validation.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/homeassistant/const.py b/homeassistant/const.py index 49f7ed18490dc5..ad9ed7f9c48ecd 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -149,6 +149,7 @@ class Platform(StrEnum): CONF_EVENT_DATA_TEMPLATE: Final = "event_data_template" CONF_EXCLUDE: Final = "exclude" CONF_EXTERNAL_URL: Final = "external_url" +CONF_EXTRA: Final = "extra" CONF_FILENAME: Final = "filename" CONF_FILE_PATH: Final = "file_path" CONF_FOR: Final = "for" diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index ed3c50cdb0020a..1e2b3083e3abbc 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -45,6 +45,7 @@ CONF_EVENT, CONF_EVENT_DATA, CONF_EVENT_DATA_TEMPLATE, + CONF_EXTRA, CONF_FOR, CONF_ID, CONF_PLATFORM, @@ -1058,6 +1059,7 @@ def script_action(value: Any) -> dict: ), vol.Optional(CONF_ENTITY_ID): comp_entity_ids, vol.Optional(CONF_TARGET): vol.Any(TARGET_SERVICE_FIELDS, dynamic_template), + vol.Optional(CONF_EXTRA): dict, } ), has_at_least_one_key(CONF_SERVICE, CONF_SERVICE_TEMPLATE), From ae693c64f7c951c80a58db5077abe10cd6c7abde Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Feb 2022 11:11:00 -0800 Subject: [PATCH 2/3] Make it metadata --- homeassistant/const.py | 1 - homeassistant/helpers/config_validation.py | 4 ++-- tests/helpers/test_config_validation.py | 1 + 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index ad9ed7f9c48ecd..49f7ed18490dc5 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -149,7 +149,6 @@ class Platform(StrEnum): CONF_EVENT_DATA_TEMPLATE: Final = "event_data_template" CONF_EXCLUDE: Final = "exclude" CONF_EXTERNAL_URL: Final = "external_url" -CONF_EXTRA: Final = "extra" CONF_FILENAME: Final = "filename" CONF_FILE_PATH: Final = "file_path" CONF_FOR: Final = "for" diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index 1e2b3083e3abbc..dd4d74972d95c5 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -45,7 +45,6 @@ CONF_EVENT, CONF_EVENT_DATA, CONF_EVENT_DATA_TEMPLATE, - CONF_EXTRA, CONF_FOR, CONF_ID, CONF_PLATFORM, @@ -1059,7 +1058,8 @@ def script_action(value: Any) -> dict: ), vol.Optional(CONF_ENTITY_ID): comp_entity_ids, vol.Optional(CONF_TARGET): vol.Any(TARGET_SERVICE_FIELDS, dynamic_template), - vol.Optional(CONF_EXTRA): dict, + # The frontend stores data here. Don't use in core. + vol.Optional("metadata"): dict, } ), has_at_least_one_key(CONF_SERVICE, CONF_SERVICE_TEMPLATE), diff --git a/tests/helpers/test_config_validation.py b/tests/helpers/test_config_validation.py index 62ae79ec5cc49e..cb288d5e2d78c3 100644 --- a/tests/helpers/test_config_validation.py +++ b/tests/helpers/test_config_validation.py @@ -410,6 +410,7 @@ def test_service_schema(): "entity_id": "all", "alias": "turn on kitchen lights", }, + {"service": "scene.turn_on", "metadata": {}}, ) for value in options: cv.SERVICE_SCHEMA(value) From bf64167aaf07d8ec4af792d2c2f924a45573b309 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 16 Feb 2022 20:33:16 +0100 Subject: [PATCH 3/3] Remove metadata during validation --- homeassistant/helpers/config_validation.py | 2 +- tests/helpers/test_config_validation.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index dd4d74972d95c5..cbd1f4ffabaf1d 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -1059,7 +1059,7 @@ def script_action(value: Any) -> dict: vol.Optional(CONF_ENTITY_ID): comp_entity_ids, vol.Optional(CONF_TARGET): vol.Any(TARGET_SERVICE_FIELDS, dynamic_template), # The frontend stores data here. Don't use in core. - vol.Optional("metadata"): dict, + vol.Remove("metadata"): dict, } ), has_at_least_one_key(CONF_SERVICE, CONF_SERVICE_TEMPLATE), diff --git a/tests/helpers/test_config_validation.py b/tests/helpers/test_config_validation.py index cb288d5e2d78c3..daa8d11d601337 100644 --- a/tests/helpers/test_config_validation.py +++ b/tests/helpers/test_config_validation.py @@ -415,6 +415,11 @@ def test_service_schema(): for value in options: cv.SERVICE_SCHEMA(value) + # Check metadata is removed from the validated output + assert cv.SERVICE_SCHEMA({"service": "scene.turn_on", "metadata": {}}) == { + "service": "scene.turn_on" + } + def test_entity_service_schema(): """Test make_entity_service_schema validation."""