1 """Calendar platform for Withings."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from datetime
import datetime
8 from aiowithings
import WithingsClient, WorkoutCategory
16 from .
import DOMAIN, WithingsConfigEntry
17 from .coordinator
import WithingsWorkoutDataUpdateCoordinator
18 from .entity
import WithingsEntity
23 entry: WithingsConfigEntry,
24 async_add_entities: AddEntitiesCallback,
26 """Set up the calendar platform for entity."""
27 ent_reg = er.async_get(hass)
28 withings_data = entry.runtime_data
30 workout_coordinator = withings_data.workout_coordinator
32 calendar_setup_before = ent_reg.async_get_entity_id(
35 f
"withings_{entry.unique_id}_workout",
38 if workout_coordinator.data
is not None or calendar_setup_before:
43 remove_calendar_listener: Callable[[],
None]
45 def _async_add_calendar_entity() -> None:
46 """Add calendar entity."""
47 if workout_coordinator.data
is not None:
51 withings_data.client, workout_coordinator
55 remove_calendar_listener()
57 remove_calendar_listener = workout_coordinator.async_add_listener(
58 _async_add_calendar_entity
63 """Return human-readable category."""
64 name = category.name.lower().capitalize()
65 return name.replace(
"_",
" ")
69 WithingsEntity[WithingsWorkoutDataUpdateCoordinator], CalendarEntity
71 """A calendar entity."""
73 _attr_translation_key =
"workout"
76 self, client: WithingsClient, coordinator: WithingsWorkoutDataUpdateCoordinator
78 """Create the Calendar entity."""
79 super().
__init__(coordinator,
"workout")
83 def event(self) -> CalendarEvent | None:
84 """Return the next upcoming event."""
88 self, hass: HomeAssistant, start_date: datetime, end_date: datetime
89 ) -> list[CalendarEvent]:
90 """Get all events in a specific time frame."""
91 workouts = await self.
clientclient.get_workouts_in_period(
92 start_date.date(), end_date.date()
95 for workout
in workouts:
97 start=workout.start_date,
102 event_list.append(event)
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
None __init__(self, WithingsClient client, WithingsWorkoutDataUpdateCoordinator coordinator)
CalendarEvent|None event(self)
str get_event_name(WorkoutCategory category)
None async_setup_entry(HomeAssistant hass, WithingsConfigEntry entry, AddEntitiesCallback async_add_entities)