From b588b8b215b820268fc0db135bd21589203809de Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Wed, 15 Mar 2023 10:06:46 -0700 Subject: [PATCH] Bump ical to 4.5.0 (#89744) --- .../components/local_calendar/calendar.py | 31 ++++++++++++------- .../components/local_calendar/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../local_calendar/test_calendar.py | 20 ++++++++++++ 5 files changed, 42 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/local_calendar/calendar.py b/homeassistant/components/local_calendar/calendar.py index 88737150c02..9cb6878ca55 100644 --- a/homeassistant/components/local_calendar/calendar.py +++ b/homeassistant/components/local_calendar/calendar.py @@ -9,7 +9,7 @@ from typing import Any from ical.calendar import Calendar from ical.calendar_stream import IcsCalendarStream from ical.event import Event -from ical.store import EventStore +from ical.store import EventStore, EventStoreError from ical.types import Range, Recur from pydantic import ValidationError import voluptuous as vol @@ -24,6 +24,7 @@ from homeassistant.components.calendar import ( ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import dt as dt_util @@ -119,11 +120,14 @@ class LocalCalendarEntity(CalendarEntity): range_value: Range = Range.NONE if recurrence_range == Range.THIS_AND_FUTURE: range_value = Range.THIS_AND_FUTURE - EventStore(self._calendar).delete( - uid, - recurrence_id=recurrence_id, - recurrence_range=range_value, - ) + try: + EventStore(self._calendar).delete( + uid, + recurrence_id=recurrence_id, + recurrence_range=range_value, + ) + except EventStoreError as err: + raise HomeAssistantError("Error while deleting event: {err}") from err await self._async_store() await self.async_update_ha_state(force_refresh=True) @@ -139,12 +143,15 @@ class LocalCalendarEntity(CalendarEntity): range_value: Range = Range.NONE if recurrence_range == Range.THIS_AND_FUTURE: range_value = Range.THIS_AND_FUTURE - EventStore(self._calendar).edit( - uid, - new_event, - recurrence_id=recurrence_id, - recurrence_range=range_value, - ) + try: + EventStore(self._calendar).edit( + uid, + new_event, + recurrence_id=recurrence_id, + recurrence_range=range_value, + ) + except EventStoreError as err: + raise HomeAssistantError("Error while updating event: {err}") from err await self._async_store() await self.async_update_ha_state(force_refresh=True) diff --git a/homeassistant/components/local_calendar/manifest.json b/homeassistant/components/local_calendar/manifest.json index a1659a9ba3b..42cd7fcf5a9 100644 --- a/homeassistant/components/local_calendar/manifest.json +++ b/homeassistant/components/local_calendar/manifest.json @@ -6,5 +6,5 @@ "documentation": "https://www.home-assistant.io/integrations/local_calendar", "iot_class": "local_polling", "loggers": ["ical"], - "requirements": ["ical==4.2.9"] + "requirements": ["ical==4.5.0"] } diff --git a/requirements_all.txt b/requirements_all.txt index 63117f0be9f..a946d316c19 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -952,7 +952,7 @@ ibm-watson==5.2.2 ibmiotf==0.3.4 # homeassistant.components.local_calendar -ical==4.2.9 +ical==4.5.0 # homeassistant.components.ping icmplib==3.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 65909e2ca80..55b9c03c502 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -723,7 +723,7 @@ iaqualink==0.5.0 ibeacon_ble==1.0.1 # homeassistant.components.local_calendar -ical==4.2.9 +ical==4.5.0 # homeassistant.components.ping icmplib==3.0 diff --git a/tests/components/local_calendar/test_calendar.py b/tests/components/local_calendar/test_calendar.py index a859ed1d90c..319a352f62b 100644 --- a/tests/components/local_calendar/test_calendar.py +++ b/tests/components/local_calendar/test_calendar.py @@ -829,6 +829,26 @@ async def test_update_invalid_event_id( assert resp["error"].get("code") == "failed" +async def test_delete_invalid_event_id( + ws_client: ClientFixture, + setup_integration: None, + hass: HomeAssistant, +) -> None: + """Test deleting an event with an invalid event uid.""" + client = await ws_client() + resp = await client.cmd( + "delete", + { + "entity_id": TEST_ENTITY, + "uid": "uid-does-not-exist", + }, + ) + assert resp + assert not resp.get("success") + assert "error" in resp + assert resp["error"].get("code") == "failed" + + @pytest.mark.parametrize( ("start_date_time", "end_date_time"), [