1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-20 02:48:57 +00:00
Files
core/homeassistant/components/ecovacs/util.py
2025-09-23 10:47:37 +02:00

57 lines
1.5 KiB
Python

"""Ecovacs util functions."""
from __future__ import annotations
from enum import Enum
import random
import string
from typing import TYPE_CHECKING
from homeassistant.core import HomeAssistant, callback
from homeassistant.util import slugify
from .entity import (
EcovacsCapabilityEntityDescription,
EcovacsDescriptionEntity,
EcovacsEntity,
)
if TYPE_CHECKING:
from .controller import EcovacsController
def get_client_device_id(hass: HomeAssistant, self_hosted: bool) -> str:
"""Get client device id."""
if self_hosted:
return f"HA-{slugify(hass.config.location_name)}"
return "".join(
random.choice(string.ascii_uppercase + string.digits) for _ in range(8)
)
def get_supported_entities(
controller: EcovacsController,
entity_class: type[EcovacsDescriptionEntity],
descriptions: tuple[EcovacsCapabilityEntityDescription, ...],
) -> list[EcovacsEntity]:
"""Return all supported entities for all devices."""
return [
entity_class(device, capability, description)
for device in controller.devices
for description in descriptions
if (capability := description.capability_fn(device.capabilities))
]
@callback
def get_name_key(enum: Enum) -> str:
"""Return the lower case name of the enum."""
return enum.name.lower()
@callback
def get_options(enum: type[Enum]) -> list[str]:
"""Return the options for the enum."""
return [get_name_key(option) for option in enum]