Home Assistant Unofficial Reference 2024.12.1
calendar.py
Go to the documentation of this file.
1 """Support for Ridwell calendars."""
2 
3 from __future__ import annotations
4 
5 import datetime
6 
7 from aioridwell.model import RidwellAccount, RidwellPickupEvent
8 
9 from homeassistant.components.calendar import CalendarEntity, CalendarEvent
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.core import HomeAssistant, callback
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from .const import DOMAIN
15 from .coordinator import RidwellDataUpdateCoordinator
16 from .entity import RidwellEntity
17 
18 
19 @callback
21  pickup_event: RidwellPickupEvent,
22 ) -> CalendarEvent:
23  """Get a HASS CalendarEvent from an aioridwell PickupEvent."""
24  pickup_type_string = ", ".join(
25  [
26  f"{pickup.name} (quantity: {pickup.quantity})"
27  for pickup in pickup_event.pickups
28  ]
29  )
30  return CalendarEvent(
31  summary=f"Ridwell Pickup ({pickup_event.state.value})",
32  description=f"Pickup types: {pickup_type_string}",
33  start=pickup_event.pickup_date,
34  end=pickup_event.pickup_date + datetime.timedelta(days=1),
35  )
36 
37 
39  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
40 ) -> None:
41  """Set up Ridwell calendars based on a config entry."""
42  coordinator: RidwellDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
43 
45  RidwellCalendar(coordinator, account)
46  for account in coordinator.accounts.values()
47  )
48 
49 
51  """Define a Ridwell calendar."""
52 
53  _attr_name = None
54  _attr_translation_key = "calendar"
55 
56  def __init__(
57  self, coordinator: RidwellDataUpdateCoordinator, account: RidwellAccount
58  ) -> None:
59  """Initialize the Ridwell entity."""
60  super().__init__(coordinator, account)
61 
62  self._attr_unique_id_attr_unique_id = self._account_account.account_id
63  self._event: CalendarEvent | None = None
64 
65  @property
66  def event(self) -> CalendarEvent | None:
67  """Return the next upcoming event."""
69 
70  async def async_get_events(
71  self,
72  hass: HomeAssistant,
73  start_date: datetime.datetime,
74  end_date: datetime.datetime,
75  ) -> list[CalendarEvent]:
76  """Return calendar events within a datetime range."""
77  return [
79  for event in self.coordinator.data[self._account_account.account_id]
80  ]
None __init__(self, RidwellDataUpdateCoordinator coordinator, RidwellAccount account)
Definition: calendar.py:58
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime.datetime start_date, datetime.datetime end_date)
Definition: calendar.py:75
CalendarEvent async_get_calendar_event_from_pickup_event(RidwellPickupEvent pickup_event)
Definition: calendar.py:22
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: calendar.py:40