From ddf668d1cb45213bdc1143f4255b68aa255dffc4 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Sun, 4 Sep 2022 22:25:43 -0700 Subject: [PATCH] Remove CalendarEventDevice which was deprecated in 2022.5 (#77809) --- homeassistant/components/calendar/__init__.py | 83 ++----------------- homeassistant/components/demo/calendar.py | 48 +---------- tests/components/calendar/test_init.py | 22 ----- 3 files changed, 7 insertions(+), 146 deletions(-) diff --git a/homeassistant/components/calendar/__init__.py b/homeassistant/components/calendar/__init__.py index 54da2a1cb02..ee1bb866e6a 100644 --- a/homeassistant/components/calendar/__init__.py +++ b/homeassistant/components/calendar/__init__.py @@ -189,71 +189,6 @@ def is_offset_reached( return start + offset_time <= dt.now(start.tzinfo) -class CalendarEventDevice(Entity): - """Legacy API for calendar event entities.""" - - def __init_subclass__(cls, **kwargs: Any) -> None: - """Print deprecation warning.""" - super().__init_subclass__(**kwargs) - _LOGGER.warning( - "CalendarEventDevice is deprecated, modify %s to extend CalendarEntity", - cls.__name__, - ) - - @property - def event(self) -> dict[str, Any] | None: - """Return the next upcoming event.""" - raise NotImplementedError() - - @final - @property - def state_attributes(self) -> dict[str, Any] | None: - """Return the entity state attributes.""" - - if (event := self.event) is None: - return None - - event = normalize_event(event) - return { - "message": event["message"], - "all_day": event["all_day"], - "start_time": event["start"], - "end_time": event["end"], - "location": event["location"], - "description": event["description"], - } - - @final - @property - def state(self) -> str: - """Return the state of the calendar event.""" - if (event := self.event) is None: - return STATE_OFF - - event = normalize_event(event) - start = event["dt_start"] - end = event["dt_end"] - - if start is None or end is None: - return STATE_OFF - - now = dt.now() - - if start <= now < end: - return STATE_ON - - return STATE_OFF - - async def async_get_events( - self, - hass: HomeAssistant, - start_date: datetime.datetime, - end_date: datetime.datetime, - ) -> list[dict[str, Any]]: - """Return calendar events within a datetime range.""" - raise NotImplementedError() - - class CalendarEntity(Entity): """Base class for calendar event entities.""" @@ -314,10 +249,14 @@ class CalendarEventView(http.HomeAssistantView): async def get(self, request: web.Request, entity_id: str) -> web.Response: """Return calendar events.""" - entity = self.component.get_entity(entity_id) + if not (entity := self.component.get_entity(entity_id)) or not isinstance( + entity, CalendarEntity + ): + return web.Response(status=HTTPStatus.BAD_REQUEST) + start = request.query.get("start") end = request.query.get("end") - if start is None or end is None or entity is None: + if start is None or end is None: return web.Response(status=HTTPStatus.BAD_REQUEST) try: start_date = dt.parse_datetime(start) @@ -327,16 +266,6 @@ class CalendarEventView(http.HomeAssistantView): if start_date is None or end_date is None: return web.Response(status=HTTPStatus.BAD_REQUEST) - # Compatibility shim for old API - if isinstance(entity, CalendarEventDevice): - event_list = await entity.async_get_events( - request.app["hass"], start_date, end_date - ) - return self.json(event_list) - - if not isinstance(entity, CalendarEntity): - return web.Response(status=HTTPStatus.BAD_REQUEST) - try: calendar_event_list = await entity.async_get_events( request.app["hass"], start_date, end_date diff --git a/homeassistant/components/demo/calendar.py b/homeassistant/components/demo/calendar.py index 415ed0dbb8d..ae546361d8f 100644 --- a/homeassistant/components/demo/calendar.py +++ b/homeassistant/components/demo/calendar.py @@ -1,16 +1,9 @@ """Demo platform that has two fake binary sensors.""" from __future__ import annotations -import copy import datetime -from typing import Any -from homeassistant.components.calendar import ( - CalendarEntity, - CalendarEvent, - CalendarEventDevice, - get_date, -) +from homeassistant.components.calendar import CalendarEntity, CalendarEvent from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType @@ -28,7 +21,6 @@ def setup_platform( [ DemoCalendar(calendar_data_future(), "Calendar 1"), DemoCalendar(calendar_data_current(), "Calendar 2"), - LegacyDemoCalendar("Calendar 3"), ] ) @@ -76,41 +68,3 @@ class DemoCalendar(CalendarEntity): ) -> list[CalendarEvent]: """Return calendar events within a datetime range.""" return [self._event] - - -class LegacyDemoCalendar(CalendarEventDevice): - """Calendar for exercising shim API.""" - - def __init__(self, name: str) -> None: - """Initialize demo calendar.""" - self._attr_name = name - one_hour_from_now = dt_util.now() + datetime.timedelta(minutes=30) - self._event = { - "start": {"dateTime": one_hour_from_now.isoformat()}, - "end": { - "dateTime": ( - one_hour_from_now + datetime.timedelta(minutes=60) - ).isoformat() - }, - "summary": "Future Event", - "description": "Future Description", - "location": "Future Location", - } - - @property - def event(self) -> dict[str, Any]: - """Return the next upcoming event.""" - return self._event - - async def async_get_events( - self, - hass: HomeAssistant, - start_date: datetime.datetime, - end_date: datetime.datetime, - ) -> list[dict[str, Any]]: - """Get all events in a specific time frame.""" - event = copy.copy(self.event) - event["title"] = event["summary"] - event["start"] = get_date(event["start"]).isoformat() - event["end"] = get_date(event["end"]).isoformat() - return [event] diff --git a/tests/components/calendar/test_init.py b/tests/components/calendar/test_init.py index 97bfd89f465..02c7f01b42d 100644 --- a/tests/components/calendar/test_init.py +++ b/tests/components/calendar/test_init.py @@ -66,26 +66,4 @@ async def test_calendars_http_api(hass, hass_client): assert data == [ {"entity_id": "calendar.calendar_1", "name": "Calendar 1"}, {"entity_id": "calendar.calendar_2", "name": "Calendar 2"}, - {"entity_id": "calendar.calendar_3", "name": "Calendar 3"}, ] - - -async def test_events_http_api_shim(hass, hass_client): - """Test the legacy shim calendar demo view.""" - await async_setup_component(hass, "calendar", {"calendar": {"platform": "demo"}}) - await hass.async_block_till_done() - client = await hass_client() - response = await client.get("/api/calendars/calendar.calendar_3") - assert response.status == HTTPStatus.BAD_REQUEST - start = dt_util.now() - end = start + timedelta(days=1) - response = await client.get( - "/api/calendars/calendar.calendar_1?start={}&end={}".format( - start.isoformat(), end.isoformat() - ) - ) - assert response.status == HTTPStatus.OK - events = await response.json() - assert events[0]["summary"] == "Future Event" - assert events[0]["description"] == "Future Description" - assert events[0]["location"] == "Future Location"