1 """Binary sensor 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
12 BinarySensorEntityDescription,
17 from .const
import ASSETS_URL
18 from .entity
import HabiticaBase
19 from .types
import HabiticaConfigEntry
22 @dataclass(kw_only=True, frozen=True)
24 """Habitica Binary Sensor Description."""
26 value_fn: Callable[[dict[str, Any]], bool |
None]
27 entity_picture: Callable[[dict[str, Any]], str |
None]
31 """Habitica Entities."""
33 PENDING_QUEST =
"pending_quest"
37 """Entity picture for pending quest invitation."""
38 if user[
"party"][
"quest"].
get(
"key")
and user[
"party"][
"quest"][
"RSVPNeeded"]:
39 return f
"inventory_quest_scroll_{user["party
"]["quest
"]["key
"]}.png"
43 BINARY_SENSOR_DESCRIPTIONS: tuple[HabiticaBinarySensorEntityDescription, ...] = (
45 key=HabiticaBinarySensor.PENDING_QUEST,
46 translation_key=HabiticaBinarySensor.PENDING_QUEST,
47 value_fn=
lambda user: user[
"party"][
"quest"][
"RSVPNeeded"],
48 entity_picture=get_scroll_image_for_pending_quest_invitation,
55 config_entry: HabiticaConfigEntry,
56 async_add_entities: AddEntitiesCallback,
58 """Set up the habitica binary sensors."""
60 coordinator = config_entry.runtime_data
64 for description
in BINARY_SENSOR_DESCRIPTIONS
69 """Representation of a Habitica binary sensor."""
71 entity_description: HabiticaBinarySensorEntityDescription
75 """If the binary sensor is on."""
80 """Return the entity picture to use in the frontend, if any."""
82 self.coordinator.data.user
84 return f
"{ASSETS_URL}{entity_picture}"
str|None entity_picture(self)
web.Response get(self, web.Request request, str config_key)
None async_setup_entry(HomeAssistant hass, HabiticaConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str|None get_scroll_image_for_pending_quest_invitation(dict[str, Any] user)