1 """A todo platform for OurGroceries."""
10 TodoListEntityFeature,
17 from .const
import DOMAIN
18 from .coordinator
import OurGroceriesDataUpdateCoordinator
22 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
24 """Set up the OurGroceries todo platform config entry."""
25 coordinator: OurGroceriesDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
28 for sl
in coordinator.lists
33 if item.get(
"crossedOffAt",
False):
34 return TodoItemStatus.COMPLETED
35 return TodoItemStatus.NEEDS_ACTION
39 CoordinatorEntity[OurGroceriesDataUpdateCoordinator], TodoListEntity
41 """An OurGroceries TodoListEntity."""
43 _attr_has_entity_name =
True
44 _attr_supported_features = (
45 TodoListEntityFeature.CREATE_TODO_ITEM
46 | TodoListEntityFeature.UPDATE_TODO_ITEM
47 | TodoListEntityFeature.DELETE_TODO_ITEM
52 coordinator: OurGroceriesDataUpdateCoordinator,
56 """Initialize TodoistTodoListEntity."""
57 super().
__init__(coordinator=coordinator)
64 """Handle updated data from the coordinator."""
65 if self.coordinator.data
is None:
74 for item
in self.coordinator.data[self.
_list_id_list_id][
"list"][
"items"]
79 """Create a To-do item."""
80 if item.status != TodoItemStatus.NEEDS_ACTION:
81 raise ValueError(
"Only active tasks may be created.")
82 await self.coordinator.og.add_item_to_list(
83 self.
_list_id_list_id, item.summary, auto_category=
True
88 """Update a To-do item."""
90 api_items = self.coordinator.data[self.
_list_id_list_id][
"list"][
"items"]
92 api_item.get(
"categoryId")
93 for api_item
in api_items
94 if api_item[
"id"] == item.uid
96 await self.coordinator.og.change_item_on_list(
97 self.
_list_id_list_id, item.uid, category, item.summary
99 if item.status
is not None:
100 cross_off = item.status == TodoItemStatus.COMPLETED
101 await self.coordinator.og.toggle_item_crossed_off(
102 self.
_list_id_list_id, item.uid, cross_off=cross_off
107 """Delete a To-do item."""
108 await asyncio.gather(
110 self.coordinator.og.remove_item_from_list(self.
_list_id_list_id, uid)
117 """When entity is added to hass update state from existing coordinator data."""
None async_update_todo_item(self, TodoItem item)
None async_create_todo_item(self, TodoItem item)
None _handle_coordinator_update(self)
None __init__(self, OurGroceriesDataUpdateCoordinator coordinator, str list_id, str list_name)
None async_added_to_hass(self)
None async_delete_todo_items(self, list[str] uids)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
TodoItemStatus _completion_status(dict[str, Any] item)