Add constants for todo services (#121616)

This commit is contained in:
Joost Lekkerkerker 2024-07-10 23:15:03 +02:00 committed by GitHub
parent 7ed5feee92
commit e56f8d795f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 12 deletions

View File

@ -33,9 +33,13 @@ from .const import (
ATTR_DUE, ATTR_DUE,
ATTR_DUE_DATE, ATTR_DUE_DATE,
ATTR_DUE_DATETIME, ATTR_DUE_DATETIME,
ATTR_ITEM,
ATTR_RENAME,
ATTR_STATUS,
DOMAIN, DOMAIN,
TodoItemStatus, TodoItemStatus,
TodoListEntityFeature, TodoListEntityFeature,
TodoServices,
) )
_LOGGER = logging.getLogger(__name__) _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) websocket_api.async_register_command(hass, websocket_handle_todo_item_move)
component.async_register_entity_service( component.async_register_entity_service(
"add_item", TodoServices.ADD_ITEM,
vol.All( vol.All(
cv.make_entity_service_schema( 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, **TODO_ITEM_FIELD_SCHEMA,
} }
), ),
@ -132,13 +136,13 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
required_features=[TodoListEntityFeature.CREATE_TODO_ITEM], required_features=[TodoListEntityFeature.CREATE_TODO_ITEM],
) )
component.async_register_entity_service( component.async_register_entity_service(
"update_item", TodoServices.UPDATE_ITEM,
vol.All( vol.All(
cv.make_entity_service_schema( 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)),
vol.Optional("rename"): vol.All(cv.string, vol.Length(min=1)), vol.Optional(ATTR_RENAME): vol.All(cv.string, vol.Length(min=1)),
vol.Optional("status"): vol.In( vol.Optional(ATTR_STATUS): vol.In(
{TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED}, {TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED},
), ),
**TODO_ITEM_FIELD_SCHEMA, **TODO_ITEM_FIELD_SCHEMA,
@ -146,27 +150,29 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
), ),
*TODO_ITEM_FIELD_VALIDATIONS, *TODO_ITEM_FIELD_VALIDATIONS,
cv.has_at_least_one_key( 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, _async_update_todo_item,
required_features=[TodoListEntityFeature.UPDATE_TODO_ITEM], required_features=[TodoListEntityFeature.UPDATE_TODO_ITEM],
) )
component.async_register_entity_service( component.async_register_entity_service(
"remove_item", TodoServices.REMOVE_ITEM,
cv.make_entity_service_schema( 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, _async_remove_todo_items,
required_features=[TodoListEntityFeature.DELETE_TODO_ITEM], required_features=[TodoListEntityFeature.DELETE_TODO_ITEM],
) )
component.async_register_entity_service( component.async_register_entity_service(
"get_items", TodoServices.GET_ITEMS,
cv.make_entity_service_schema( cv.make_entity_service_schema(
{ {
vol.Optional("status"): vol.All( vol.Optional(ATTR_STATUS): vol.All(
cv.ensure_list, cv.ensure_list,
[vol.In({TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED})], [vol.In({TodoItemStatus.NEEDS_ACTION, TodoItemStatus.COMPLETED})],
), ),
@ -176,7 +182,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
supports_response=SupportsResponse.ONLY, supports_response=SupportsResponse.ONLY,
) )
component.async_register_entity_service( component.async_register_entity_service(
"remove_completed_items", TodoServices.REMOVE_COMPLETED_ITEMS,
{}, {},
_async_remove_completed_items, _async_remove_completed_items,
required_features=[TodoListEntityFeature.DELETE_TODO_ITEM], required_features=[TodoListEntityFeature.DELETE_TODO_ITEM],

View File

@ -8,6 +8,19 @@ ATTR_DUE = "due"
ATTR_DUE_DATE = "due_date" ATTR_DUE_DATE = "due_date"
ATTR_DUE_DATETIME = "due_datetime" ATTR_DUE_DATETIME = "due_datetime"
ATTR_DESCRIPTION = "description" 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): class TodoListEntityFeature(IntFlag):