mirror of
https://github.com/home-assistant/core.git
synced 2025-11-21 08:47:15 +00:00
78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
"""Constants for the Home Assistant Labs integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import TYPE_CHECKING, TypedDict
|
|
|
|
from homeassistant.util.hass_dict import HassKey
|
|
|
|
if TYPE_CHECKING:
|
|
from homeassistant.helpers.storage import Store
|
|
|
|
DOMAIN = "labs"
|
|
|
|
STORAGE_KEY = "core.labs"
|
|
STORAGE_VERSION = 1
|
|
|
|
EVENT_LABS_UPDATED = "labs_updated"
|
|
|
|
|
|
class EventLabsUpdatedData(TypedDict):
|
|
"""Event data for labs_updated event."""
|
|
|
|
domain: str
|
|
preview_feature: str
|
|
enabled: bool
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True, slots=True)
|
|
class LabPreviewFeature:
|
|
"""Lab preview feature definition."""
|
|
|
|
domain: str
|
|
preview_feature: str
|
|
is_built_in: bool = True
|
|
feedback_url: str | None = None
|
|
learn_more_url: str | None = None
|
|
report_issue_url: str | None = None
|
|
|
|
@property
|
|
def full_key(self) -> str:
|
|
"""Return the full key for the preview feature (domain.preview_feature)."""
|
|
return f"{self.domain}.{self.preview_feature}"
|
|
|
|
def to_dict(self, enabled: bool) -> dict[str, str | bool | None]:
|
|
"""Return a serialized version of the preview feature.
|
|
|
|
Args:
|
|
enabled: Whether the preview feature is currently enabled
|
|
|
|
Returns:
|
|
Dictionary with preview feature data including enabled status
|
|
"""
|
|
return {
|
|
"preview_feature": self.preview_feature,
|
|
"domain": self.domain,
|
|
"enabled": enabled,
|
|
"is_built_in": self.is_built_in,
|
|
"feedback_url": self.feedback_url,
|
|
"learn_more_url": self.learn_more_url,
|
|
"report_issue_url": self.report_issue_url,
|
|
}
|
|
|
|
|
|
type LabsStoreData = dict[str, set[tuple[str, str]]]
|
|
|
|
|
|
@dataclass
|
|
class LabsData:
|
|
"""Storage class for Labs global data."""
|
|
|
|
store: Store[LabsStoreData]
|
|
data: LabsStoreData
|
|
preview_features: dict[str, LabPreviewFeature] = field(default_factory=dict)
|
|
|
|
|
|
LABS_DATA: HassKey[LabsData] = HassKey(DOMAIN)
|