diff --git a/homeassistant/components/todo/__init__.py b/homeassistant/components/todo/__init__.py index a515f0805e7..5febc9561c4 100644 --- a/homeassistant/components/todo/__init__.py +++ b/homeassistant/components/todo/__init__.py @@ -33,9 +33,13 @@ from .const import ( ATTR_DUE, ATTR_DUE_DATE, ATTR_DUE_DATETIME, + ATTR_ITEM, + ATTR_RENAME, + ATTR_STATUS, DOMAIN, TodoItemStatus, TodoListEntityFeature, + TodoServices, ) _LOGGER = logging.getLogger(__name__) @@ -118,11 +122,11 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: websocket_api.async_register_command(hass, websocket_handle_todo_item_move) component.async_register_entity_service( - "add_item", + TodoServices.ADD_ITEM, vol.All( cv.make_entity_service_schema( { - vol.Required("item"): vol.All(cv.string, vol.Length(min=1)), + vol.Required(ATTR_ITEM): vol.All(cv.string, vol.Length(min=1)), **TODO_ITEM_FIELD_SCHEMA, } ), @@ -132,13 +136,13 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: required_features=[TodoListEntityFeature.CREATE_TODO_ITEM], ) component.async_register_entity_service( - "update_item", + TodoServices.UPDATE_ITEM, vol.All( cv.make_entity_service_schema( { - vol.Required("item"): vol.All(cv.string, vol.Length(min=1)), - vol.Optional("rename"): vol.All(cv.string, vol.Length(min=1)), - vol.Optional("status"): vol.In( + vol.Required(ATTR_ITEM): vol.All(cv.string, vol.Length(min=1)), + vol.Optional(ATTR_RENAME): vol.All(cv.string, vol.Length(min=1)), + vol.Optional(ATTR_STATUS): vol.In( {TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED}, ), **TODO_ITEM_FIELD_SCHEMA, @@ -146,27 +150,29 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: ), *TODO_ITEM_FIELD_VALIDATIONS, cv.has_at_least_one_key( - "rename", "status", *[desc.service_field for desc in TODO_ITEM_FIELDS] + ATTR_RENAME, + ATTR_STATUS, + *[desc.service_field for desc in TODO_ITEM_FIELDS], ), ), _async_update_todo_item, required_features=[TodoListEntityFeature.UPDATE_TODO_ITEM], ) component.async_register_entity_service( - "remove_item", + TodoServices.REMOVE_ITEM, cv.make_entity_service_schema( { - vol.Required("item"): vol.All(cv.ensure_list, [cv.string]), + vol.Required(ATTR_ITEM): vol.All(cv.ensure_list, [cv.string]), } ), _async_remove_todo_items, required_features=[TodoListEntityFeature.DELETE_TODO_ITEM], ) component.async_register_entity_service( - "get_items", + TodoServices.GET_ITEMS, cv.make_entity_service_schema( { - vol.Optional("status"): vol.All( + vol.Optional(ATTR_STATUS): vol.All( cv.ensure_list, [vol.In({TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED})], ), @@ -176,7 +182,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: supports_response=SupportsResponse.ONLY, ) component.async_register_entity_service( - "remove_completed_items", + TodoServices.REMOVE_COMPLETED_ITEMS, {}, _async_remove_completed_items, required_features=[TodoListEntityFeature.DELETE_TODO_ITEM], diff --git a/homeassistant/components/todo/const.py b/homeassistant/components/todo/const.py index a605f9fcba2..ee7ef53715d 100644 --- a/homeassistant/components/todo/const.py +++ b/homeassistant/components/todo/const.py @@ -8,6 +8,19 @@ ATTR_DUE = "due" ATTR_DUE_DATE = "due_date" ATTR_DUE_DATETIME = "due_datetime" ATTR_DESCRIPTION = "description" +ATTR_ITEM = "item" +ATTR_RENAME = "rename" +ATTR_STATUS = "status" + + +class TodoServices(StrEnum): + """Services for the To-do integration.""" + + ADD_ITEM = "add_item" + UPDATE_ITEM = "update_item" + REMOVE_ITEM = "remove_item" + GET_ITEMS = "get_items" + REMOVE_COMPLETED_ITEMS = "remove_completed_items" class TodoListEntityFeature(IntFlag):