2023-11-05 00:36:00 +00:00
|
|
|
"""Library for working with CalDAV api."""
|
|
|
|
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
import caldav
|
|
|
|
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
|
|
|
|
|
|
|
|
async def async_get_calendars(
|
|
|
|
hass: HomeAssistant, client: caldav.DAVClient, component: str
|
|
|
|
) -> list[caldav.Calendar]:
|
|
|
|
"""Get all calendars that support the specified component."""
|
|
|
|
calendars = await hass.async_add_executor_job(client.principal().calendars)
|
|
|
|
components_results = await asyncio.gather(
|
|
|
|
*[
|
|
|
|
hass.async_add_executor_job(calendar.get_supported_components)
|
|
|
|
for calendar in calendars
|
|
|
|
]
|
|
|
|
)
|
|
|
|
return [
|
|
|
|
calendar
|
|
|
|
for calendar, supported_components in zip(calendars, components_results)
|
|
|
|
if component in supported_components
|
|
|
|
]
|
2023-11-07 08:11:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
def get_attr_value(obj: caldav.CalendarObjectResource, attribute: str) -> str | None:
|
|
|
|
"""Return the value of the CalDav object attribute if defined."""
|
|
|
|
if hasattr(obj, attribute):
|
|
|
|
return getattr(obj, attribute).value
|
|
|
|
return None
|