"""Hass.io const variables.""" from datetime import timedelta from enum import StrEnum from typing import TYPE_CHECKING from homeassistant.util.hass_dict import HassKey if TYPE_CHECKING: from aiohasupervisor.models import ( AddonsStats, HomeAssistantInfo, HostInfo, InstalledAddon, InstalledAddonComplete, NetworkInfo, OSInfo, RootInfo, StoreInfo, SupervisorInfo, ) from homeassistant.auth.models import User from .config import HassioConfig from .coordinator import ( HassioAddOnDataUpdateCoordinator, HassioMainDataUpdateCoordinator, HassioStatsDataUpdateCoordinator, ) from .handler import HassIO from .issues import SupervisorIssues DOMAIN = "hassio" ATTR_ADDON = "addon" ATTR_ADDONS = "addons" ATTR_APP = "app" ATTR_APPS = "apps" ATTR_ADMIN = "admin" ATTR_COMPRESSED = "compressed" ATTR_CONFIG = "config" ATTR_DATA = "data" ATTR_SESSION_DATA_USER_ID = "user_id" ATTR_DISCOVERY = "discovery" ATTR_ENABLE = "enable" ATTR_ENDPOINT = "endpoint" ATTR_FOLDERS = "folders" ATTR_HEALTHY = "healthy" ATTR_HOMEASSISTANT = "homeassistant" ATTR_HOMEASSISTANT_EXCLUDE_DATABASE = "homeassistant_exclude_database" ATTR_INPUT = "input" ATTR_ISSUES = "issues" ATTR_MESSAGE = "message" ATTR_METHOD = "method" ATTR_PANELS = "panels" ATTR_PARAMS = "params" ATTR_PASSWORD = "password" ATTR_RESULT = "result" ATTR_STARTUP = "startup" ATTR_SUGGESTIONS = "suggestions" ATTR_SUPPORTED = "supported" ATTR_TIMEOUT = "timeout" ATTR_TITLE = "title" ATTR_UNHEALTHY = "unhealthy" ATTR_UNHEALTHY_REASONS = "unhealthy_reasons" ATTR_UNSUPPORTED = "unsupported" ATTR_UNSUPPORTED_REASONS = "unsupported_reasons" ATTR_UPDATE_KEY = "update_key" ATTR_USERNAME = "username" ATTR_UUID = "uuid" ATTR_WS_EVENT = "event" X_AUTH_TOKEN = "X-Supervisor-Token" X_INGRESS_PATH = "X-Ingress-Path" X_HASS_SOURCE = "X-Hass-Source" WS_TYPE = "type" WS_ID = "id" WS_TYPE_API = "supervisor/api" WS_TYPE_EVENT = "supervisor/event" WS_TYPE_SUBSCRIBE = "supervisor/subscribe" EVENT_SUPERVISOR_EVENT = "supervisor_event" EVENT_SUPERVISOR_UPDATE = "supervisor_update" EVENT_HEALTH_CHANGED = "health_changed" EVENT_SUPPORTED_CHANGED = "supported_changed" EVENT_ISSUE_CHANGED = "issue_changed" EVENT_ISSUE_REMOVED = "issue_removed" EVENT_JOB = "job" UPDATE_KEY_SUPERVISOR = "supervisor" STARTUP_COMPLETE = "complete" MAIN_COORDINATOR: HassKey[HassioMainDataUpdateCoordinator] = HassKey( "hassio_main_coordinator" ) ADDONS_COORDINATOR: HassKey[HassioAddOnDataUpdateCoordinator] = HassKey( "hassio_addons_coordinator" ) STATS_COORDINATOR: HassKey[HassioStatsDataUpdateCoordinator] = HassKey( "hassio_stats_coordinator" ) DATA_COMPONENT: HassKey[HassIO] = HassKey(DOMAIN) DATA_CONFIG_STORE: HassKey[HassioConfig] = HassKey("hassio_config_store") DATA_CORE_INFO: HassKey[HomeAssistantInfo] = HassKey("hassio_core_info") DATA_CORE_STATS = "hassio_core_stats" DATA_HOST_INFO: HassKey[HostInfo] = HassKey("hassio_host_info") DATA_STORE: HassKey[StoreInfo] = HassKey("hassio_store") DATA_INFO: HassKey[RootInfo] = HassKey("hassio_info") DATA_OS_INFO: HassKey[OSInfo] = HassKey("hassio_os_info") DATA_NETWORK_INFO: HassKey[NetworkInfo] = HassKey("hassio_network_info") DATA_SUPERVISOR_INFO: HassKey[SupervisorInfo] = HassKey("hassio_supervisor_info") DATA_SUPERVISOR_STATS = "hassio_supervisor_stats" DATA_ADDONS_INFO: HassKey[dict[str, InstalledAddonComplete | None]] = HassKey( "hassio_addons_info" ) DATA_ADDONS_STATS: HassKey[dict[str, AddonsStats | None]] = HassKey( "hassio_addons_stats" ) DATA_ADDONS_LIST: HassKey[list[InstalledAddon]] = HassKey("hassio_addons_list") HASSIO_MAIN_UPDATE_INTERVAL = timedelta(minutes=5) HASSIO_ADDON_UPDATE_INTERVAL = timedelta(minutes=15) HASSIO_STATS_UPDATE_INTERVAL = timedelta(seconds=60) ATTR_AUTO_UPDATE = "auto_update" ATTR_VERSION = "version" ATTR_VERSION_LATEST = "version_latest" ATTR_CPU_PERCENT = "cpu_percent" ATTR_MEMORY_PERCENT = "memory_percent" ATTR_SLUG = "slug" ATTR_STARTED = "started" ATTR_URL = "url" ATTR_REPOSITORY = "repository" ATTR_REPOSITORIES = "repositories" DATA_KEY_ADDONS = "addons" DATA_KEY_OS = "os" DATA_KEY_SUPERVISOR = "supervisor" DATA_KEY_CORE = "core" DATA_KEY_HOST = "host" DATA_KEY_SUPERVISOR_ISSUES: HassKey[SupervisorIssues] = HassKey("supervisor_issues") DATA_KEY_MOUNTS = "mounts" DATA_HASSIO_HOST: HassKey[str] = HassKey("hassio_host") DATA_HASSIO_SUPERVISOR_USER: HassKey[User] = HassKey("hassio_supervisor_user") PLACEHOLDER_KEY_ADDON = "addon" PLACEHOLDER_KEY_ADDON_INFO = "addon_info" PLACEHOLDER_KEY_ADDON_DOCUMENTATION = "addon_documentation" PLACEHOLDER_KEY_ADDON_URL = "addon_url" PLACEHOLDER_KEY_REFERENCE = "reference" PLACEHOLDER_KEY_COMPONENTS = "components" PLACEHOLDER_KEY_FREE_SPACE = "free_space" ISSUE_KEY_ADDON_BOOT_FAIL = "issue_addon_boot_fail" ISSUE_KEY_SYSTEM_DOCKER_CONFIG = "issue_system_docker_config" ISSUE_KEY_ADDON_DETACHED_ADDON_MISSING = "issue_addon_detached_addon_missing" ISSUE_KEY_ADDON_DETACHED_ADDON_REMOVED = "issue_addon_detached_addon_removed" ISSUE_KEY_ADDON_PWNED = "issue_addon_pwned" ISSUE_KEY_SYSTEM_FREE_SPACE = "issue_system_free_space" ISSUE_KEY_ADDON_DEPRECATED = "issue_addon_deprecated_addon" ISSUE_KEY_ADDON_DEPRECATED_ARCH = "issue_addon_deprecated_arch_addon" ISSUE_KEY_LEGACY_HOMEASSISTANT_FOLDER = "legacy_homeassistant_folder" ISSUE_MOUNT_MOUNT_FAILED = "issue_mount_mount_failed" CORE_CONTAINER = "homeassistant" SUPERVISOR_CONTAINER = "hassio_supervisor" CONTAINER_STATS = "stats" REQUEST_REFRESH_DELAY = 10 HELP_URLS = { "help_url": "https://www.home-assistant.io/help/", "community_url": "https://community.home-assistant.io/", } EXTRA_PLACEHOLDERS = { "issue_mount_mount_failed": { "storage_url": "/config/storage", }, ISSUE_KEY_ADDON_DETACHED_ADDON_REMOVED: HELP_URLS, ISSUE_KEY_SYSTEM_FREE_SPACE: { "more_info_free_space": "https://www.home-assistant.io/more-info/free-space", "storage_url": "/config/storage", }, ISSUE_KEY_ADDON_PWNED: { "more_info_pwned": "https://www.home-assistant.io/more-info/pwned-passwords", }, ISSUE_KEY_ADDON_DEPRECATED: HELP_URLS, ISSUE_KEY_ADDON_DEPRECATED_ARCH: HELP_URLS, } class SupervisorEntityModel(StrEnum): """Supervisor entity model.""" ADDON = "Home Assistant App" OS = "Home Assistant Operating System" CORE = "Home Assistant Core" SUPERVISOR = "Home Assistant Supervisor" HOST = "Home Assistant Host" MOUNT = "Home Assistant Mount"