1 """Switch platform for Habitica integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from enum
import StrEnum
13 SwitchEntityDescription,
18 from .coordinator
import HabiticaData, HabiticaDataUpdateCoordinator
19 from .entity
import HabiticaBase
20 from .types
import HabiticaConfigEntry
25 @dataclass(kw_only=True, frozen=True)
27 """Describes Habitica switch entity."""
29 turn_on_fn: Callable[[HabiticaDataUpdateCoordinator], Any]
30 turn_off_fn: Callable[[HabiticaDataUpdateCoordinator], Any]
31 is_on_fn: Callable[[HabiticaData], bool]
35 """Habitica switch entities."""
40 SWTICH_DESCRIPTIONS: tuple[HabiticaSwitchEntityDescription, ...] = (
42 key=HabiticaSwitchEntity.SLEEP,
43 translation_key=HabiticaSwitchEntity.SLEEP,
44 device_class=SwitchDeviceClass.SWITCH,
45 turn_on_fn=
lambda coordinator: coordinator.api[
"user"][
"sleep"].
post(),
46 turn_off_fn=
lambda coordinator: coordinator.api[
"user"][
"sleep"].
post(),
47 is_on_fn=
lambda data: data.user[
"preferences"][
"sleep"],
54 entry: HabiticaConfigEntry,
55 async_add_entities: AddEntitiesCallback,
57 """Set up switches from a config entry."""
59 coordinator = entry.runtime_data
62 HabiticaSwitch(coordinator, description)
for description
in SWTICH_DESCRIPTIONS
67 """Representation of a Habitica Switch."""
69 entity_description: HabiticaSwitchEntityDescription
73 """Return the state of the device."""
75 self.coordinator.data,
79 """Turn the entity on."""
84 """Turn the entity off."""
None execute(self, Callable[[HabiticaDataUpdateCoordinator], Any] func)
None async_turn_on(self, **Any kwargs)
None async_turn_off(self, **Any kwargs)
web.Response post(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, HabiticaConfigEntry entry, AddEntitiesCallback async_add_entities)