home-assistant/core · error · HomeAssistantError

CalDAV lookup error: {err}

Error message

CalDAV lookup error: {err}

What it means

HomeAssistantError raised in async_update_todo_item when the todo_by_uid lookup fails at the transport/DAV level (requests.ConnectionError, requests.Timeout, or DAVError) rather than with NotFoundError. The message embeds the underlying exception text.

Source

Thrown at homeassistant/components/caldav/todo.py:157

                partial(self._calendar.save_todo, **item_data),
            )
            # refreshing async otherwise it would take too much time
            self.hass.async_create_task(self.async_update_ha_state(force_refresh=True))
        except (requests.ConnectionError, requests.Timeout, DAVError) as err:
            raise HomeAssistantError(f"CalDAV save error: {err}") from err

    @override
    async def async_update_todo_item(self, item: TodoItem) -> None:
        """Update a To-do item."""
        uid: str = cast(str, item.uid)
        try:
            todo = await self.hass.async_add_executor_job(
                self._calendar.todo_by_uid, uid
            )
        except NotFoundError as err:
            raise HomeAssistantError(f"Could not find To-do item {uid}") from err
        except (requests.ConnectionError, requests.Timeout, DAVError) as err:
            raise HomeAssistantError(f"CalDAV lookup error: {err}") from err
        vtodo = todo.icalendar_component  # type: ignore[attr-defined]
        vtodo["SUMMARY"] = item.summary or ""
        if status := item.status:
            vtodo["STATUS"] = TODO_STATUS_MAP_INV.get(status, "NEEDS-ACTION")
        if due := item.due:
            todo.set_due(due)  # type: ignore[attr-defined]
        else:
            vtodo.pop("DUE", None)
        if description := item.description:
            vtodo["DESCRIPTION"] = description
        else:
            vtodo.pop("DESCRIPTION", None)
        try:
            await self.hass.async_add_executor_job(
                partial(
                    todo.save,
                    no_create=True,
                    obj_type="todo",

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Verify server connectivity and latency from the HA host
  2. Reduce calendar size or increase server performance if REPORT queries on big VTODO collections time out
  3. Retry the update once the server responds to a basic request
Defensive patterns

Strategy: retry

Try / catch

except (requests.ConnectionError, requests.Timeout, DAVError) as err:
    raise HomeAssistantError(f"CalDAV lookup error: {err}") from err

Prevention

When it happens

Trigger: Updating a to-do item while the CalDAV server is unreachable, slow beyond the client timeout, or returns an unparseable DAV response for the lookup REPORT query.

Common situations: Network outages during item edits, overloaded self-hosted servers, or reverse proxies timing out long REPORT queries on large calendars.

Related errors


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/62140de9d545311b. Report an issue: GitHub.