diff --git a/homeassistant/components/python_script/__init__.py b/homeassistant/components/python_script/__init__.py index bed159cae6bf9b..2051b32b63f2ab 100644 --- a/homeassistant/components/python_script/__init__.py +++ b/homeassistant/components/python_script/__init__.py @@ -19,7 +19,7 @@ ) import voluptuous as vol -from homeassistant.const import SERVICE_RELOAD +from homeassistant.const import CONF_DESCRIPTION, CONF_NAME, SERVICE_RELOAD from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.service import async_set_service_schema from homeassistant.loader import bind_hass @@ -71,6 +71,8 @@ "get_age", } +CONF_FIELDS = "fields" + class ScriptError(HomeAssistantError): """When a script error occurs.""" @@ -125,8 +127,9 @@ def python_script_service_handler(call): hass.services.register(DOMAIN, name, python_script_service_handler) service_desc = { - "description": services_dict.get(name, {}).get("description", ""), - "fields": services_dict.get(name, {}).get("fields", {}), + CONF_NAME: services_dict.get(name, {}).get("name", name), + CONF_DESCRIPTION: services_dict.get(name, {}).get("description", ""), + CONF_FIELDS: services_dict.get(name, {}).get("fields", {}), } async_set_service_schema(hass, DOMAIN, name, service_desc) diff --git a/homeassistant/components/python_script/services.yaml b/homeassistant/components/python_script/services.yaml index 835f6402481435..e9f860f1a6289f 100644 --- a/homeassistant/components/python_script/services.yaml +++ b/homeassistant/components/python_script/services.yaml @@ -1,4 +1,5 @@ # Describes the format for available python_script services reload: + name: Reload description: Reload all available python_scripts diff --git a/homeassistant/components/script/__init__.py b/homeassistant/components/script/__init__.py index d8af3e4a96db92..ca928f810e2363 100644 --- a/homeassistant/components/script/__init__.py +++ b/homeassistant/components/script/__init__.py @@ -12,6 +12,7 @@ ATTR_NAME, CONF_ALIAS, CONF_DEFAULT, + CONF_DESCRIPTION, CONF_ICON, CONF_MODE, CONF_NAME, @@ -54,7 +55,6 @@ ATTR_VARIABLES = "variables" CONF_ADVANCED = "advanced" -CONF_DESCRIPTION = "description" CONF_EXAMPLE = "example" CONF_FIELDS = "fields" CONF_REQUIRED = "required" @@ -256,6 +256,7 @@ async def service_handler(service): # Register the service description service_desc = { + CONF_NAME: script_entity.name, CONF_DESCRIPTION: cfg[CONF_DESCRIPTION], CONF_FIELDS: cfg[CONF_FIELDS], } diff --git a/homeassistant/components/script/services.yaml b/homeassistant/components/script/services.yaml index 5af81734a9e2f2..b772b80a1d2055 100644 --- a/homeassistant/components/script/services.yaml +++ b/homeassistant/components/script/services.yaml @@ -1,16 +1,20 @@ # Describes the format for available python_script services reload: + name: Reload description: Reload all the available scripts turn_on: + name: Turn on description: Turn on script target: turn_off: + name: Turn off description: Turn off script target: toggle: + name: Toggle description: Toggle script target: diff --git a/homeassistant/const.py b/homeassistant/const.py index b601135279ff19..5dbd9556cd93e6 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -73,6 +73,7 @@ CONF_DEFAULT = "default" CONF_DELAY = "delay" CONF_DELAY_TIME = "delay_time" +CONF_DESCRIPTION = "description" CONF_DEVICE = "device" CONF_DEVICES = "devices" CONF_DEVICE_CLASS = "device_class" diff --git a/tests/components/python_script/test_init.py b/tests/components/python_script/test_init.py index b58bd6eb46908c..142d833698d0f5 100644 --- a/tests/components/python_script/test_init.py +++ b/tests/components/python_script/test_init.py @@ -306,6 +306,7 @@ async def test_service_descriptions(hass): service_descriptions1 = ( "hello:\n" + " name: ABC\n" " description: Description of hello.py.\n" " fields:\n" " fake_param:\n" @@ -333,6 +334,7 @@ async def test_service_descriptions(hass): assert len(descriptions) == 1 + assert descriptions[DOMAIN]["hello"]["name"] == "ABC" assert descriptions[DOMAIN]["hello"]["description"] == "Description of hello.py." assert ( descriptions[DOMAIN]["hello"]["fields"]["fake_param"]["description"] @@ -343,6 +345,8 @@ async def test_service_descriptions(hass): == "This is a test of python_script.hello" ) + # Verify default name = file name + assert descriptions[DOMAIN]["world_beer"]["name"] == "world_beer" assert descriptions[DOMAIN]["world_beer"]["description"] == "" assert bool(descriptions[DOMAIN]["world_beer"]["fields"]) is False diff --git a/tests/components/script/test_init.py b/tests/components/script/test_init.py index c1485a0c6ab0cf..cf2c632ee1662e 100644 --- a/tests/components/script/test_init.py +++ b/tests/components/script/test_init.py @@ -269,6 +269,7 @@ async def test_service_descriptions(hass): descriptions = await async_get_all_descriptions(hass) + assert descriptions[DOMAIN]["test"]["name"] == "test" assert descriptions[DOMAIN]["test"]["description"] == "test description" assert not descriptions[DOMAIN]["test"]["fields"] @@ -303,6 +304,27 @@ async def test_service_descriptions(hass): == "test_param example" ) + # Test 3: has "alias" that will be used as "name" + with patch( + "homeassistant.config.load_yaml_config_file", + return_value={ + "script": { + "test_name": { + "alias": "ABC", + "sequence": [{"delay": {"seconds": 5}}], + } + } + }, + ): + await hass.services.async_call(DOMAIN, SERVICE_RELOAD, blocking=True) + + descriptions = await async_get_all_descriptions(hass) + + assert descriptions[DOMAIN]["test_name"]["name"] == "ABC" + + # Test 4: verify that names from YAML are taken into account as well + assert descriptions[DOMAIN]["turn_on"]["name"] == "Turn on" + async def test_shared_context(hass): """Test that the shared context is passed down the chain."""