Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions homeassistant/components/python_script/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -71,6 +71,8 @@
"get_age",
}

CONF_FIELDS = "fields"


class ScriptError(HomeAssistantError):
"""When a script error occurs."""
Expand Down Expand Up @@ -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)

Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/python_script/services.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Describes the format for available python_script services

reload:
name: Reload
description: Reload all available python_scripts
3 changes: 2 additions & 1 deletion homeassistant/components/script/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
ATTR_NAME,
CONF_ALIAS,
CONF_DEFAULT,
CONF_DESCRIPTION,
CONF_ICON,
CONF_MODE,
CONF_NAME,
Expand Down Expand Up @@ -54,7 +55,6 @@
ATTR_VARIABLES = "variables"

CONF_ADVANCED = "advanced"
CONF_DESCRIPTION = "description"
CONF_EXAMPLE = "example"
CONF_FIELDS = "fields"
CONF_REQUIRED = "required"
Expand Down Expand Up @@ -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],
}
Expand Down
4 changes: 4 additions & 0 deletions homeassistant/components/script/services.yaml
Original file line number Diff line number Diff line change
@@ -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:
1 change: 1 addition & 0 deletions homeassistant/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 4 additions & 0 deletions tests/components/python_script/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"]
Expand All @@ -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

Expand Down
22 changes: 22 additions & 0 deletions tests/components/script/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

Expand Down Expand Up @@ -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."""
Expand Down