Freeze integration entity descriptions (#105984)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Erik Montnemery 2023-12-19 03:28:13 +01:00 committed by GitHub
parent ae8db120e8
commit 0c2485bc03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
462 changed files with 806 additions and 804 deletions

View File

@ -27,7 +27,7 @@ ABODE_TEMPERATURE_UNIT_HA_UNIT = {
} }
@dataclass @dataclass(frozen=True)
class AbodeSensorDescriptionMixin: class AbodeSensorDescriptionMixin:
"""Mixin for Abode sensor.""" """Mixin for Abode sensor."""
@ -35,7 +35,7 @@ class AbodeSensorDescriptionMixin:
native_unit_of_measurement_fn: Callable[[AbodeSense], str] native_unit_of_measurement_fn: Callable[[AbodeSense], str]
@dataclass @dataclass(frozen=True)
class AbodeSensorDescription(SensorEntityDescription, AbodeSensorDescriptionMixin): class AbodeSensorDescription(SensorEntityDescription, AbodeSensorDescriptionMixin):
"""Class describing Abode sensor entities.""" """Class describing Abode sensor entities."""

View File

@ -45,14 +45,14 @@ from .const import (
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@dataclass @dataclass(frozen=True)
class AccuWeatherSensorDescriptionMixin: class AccuWeatherSensorDescriptionMixin:
"""Mixin for AccuWeather sensor.""" """Mixin for AccuWeather sensor."""
value_fn: Callable[[dict[str, Any]], str | int | float | None] value_fn: Callable[[dict[str, Any]], str | int | float | None]
@dataclass @dataclass(frozen=True)
class AccuWeatherSensorDescription( class AccuWeatherSensorDescription(
SensorEntityDescription, AccuWeatherSensorDescriptionMixin SensorEntityDescription, AccuWeatherSensorDescriptionMixin
): ):

View File

@ -22,7 +22,7 @@ SCAN_INTERVAL = timedelta(seconds=300)
PARALLEL_UPDATES = 4 PARALLEL_UPDATES = 4
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class AdGuardHomeEntityDescription(SensorEntityDescription): class AdGuardHomeEntityDescription(SensorEntityDescription):
"""Describes AdGuard Home sensor entity.""" """Describes AdGuard Home sensor entity."""

View File

@ -21,7 +21,7 @@ SCAN_INTERVAL = timedelta(seconds=10)
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class AdGuardHomeSwitchEntityDescription(SwitchEntityDescription): class AdGuardHomeSwitchEntityDescription(SwitchEntityDescription):
"""Describes AdGuard Home switch entity.""" """Describes AdGuard Home switch entity."""

View File

@ -56,7 +56,7 @@ from .const import (
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@dataclass @dataclass(frozen=True)
class AirlySensorEntityDescription(SensorEntityDescription): class AirlySensorEntityDescription(SensorEntityDescription):
"""Class describing Airly sensor entities.""" """Class describing Airly sensor entities."""

View File

@ -51,7 +51,7 @@ ATTR_LEVEL = "level"
ATTR_STATION = "reporting_station" ATTR_STATION = "reporting_station"
@dataclass @dataclass(frozen=True)
class AirNowEntityDescriptionMixin: class AirNowEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -59,7 +59,7 @@ class AirNowEntityDescriptionMixin:
extra_state_attributes_fn: Callable[[Any], dict[str, str]] | None extra_state_attributes_fn: Callable[[Any], dict[str, str]] | None
@dataclass @dataclass(frozen=True)
class AirNowEntityDescription(SensorEntityDescription, AirNowEntityDescriptionMixin): class AirNowEntityDescription(SensorEntityDescription, AirNowEntityDescriptionMixin):
"""Describes Airnow sensor entity.""" """Describes Airnow sensor entity."""

View File

@ -37,14 +37,14 @@ from .const import (
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class AirQEntityDescriptionMixin: class AirQEntityDescriptionMixin:
"""Class for keys required by AirQ entity.""" """Class for keys required by AirQ entity."""
value: Callable[[dict], float | int | None] value: Callable[[dict], float | int | None]
@dataclass @dataclass(frozen=True)
class AirQEntityDescription(SensorEntityDescription, AirQEntityDescriptionMixin): class AirQEntityDescription(SensorEntityDescription, AirQEntityDescriptionMixin):
"""Describes AirQ sensor entity.""" """Describes AirQ sensor entity."""

View File

@ -26,7 +26,7 @@ from . import AirVisualProData, AirVisualProEntity
from .const import DOMAIN from .const import DOMAIN
@dataclass @dataclass(frozen=True)
class AirVisualProMeasurementKeyMixin: class AirVisualProMeasurementKeyMixin:
"""Define an entity description mixin to include a measurement key.""" """Define an entity description mixin to include a measurement key."""
@ -35,7 +35,7 @@ class AirVisualProMeasurementKeyMixin:
] ]
@dataclass @dataclass(frozen=True)
class AirVisualProMeasurementDescription( class AirVisualProMeasurementDescription(
SensorEntityDescription, AirVisualProMeasurementKeyMixin SensorEntityDescription, AirVisualProMeasurementKeyMixin
): ):

View File

@ -29,7 +29,7 @@ from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneSystemEntity, AirzoneZoneEntity from .entity import AirzoneEntity, AirzoneSystemEntity, AirzoneZoneEntity
@dataclass @dataclass(frozen=True)
class AirzoneBinarySensorEntityDescription(BinarySensorEntityDescription): class AirzoneBinarySensorEntityDescription(BinarySensorEntityDescription):
"""A class that describes airzone binary sensor entities.""" """A class that describes airzone binary sensor entities."""

View File

@ -26,7 +26,7 @@ from .coordinator import AirzoneUpdateCoordinator
from .entity import AirzoneEntity, AirzoneZoneEntity from .entity import AirzoneEntity, AirzoneZoneEntity
@dataclass @dataclass(frozen=True)
class AirzoneSelectDescriptionMixin: class AirzoneSelectDescriptionMixin:
"""Define an entity description mixin for select entities.""" """Define an entity description mixin for select entities."""
@ -34,7 +34,7 @@ class AirzoneSelectDescriptionMixin:
options_dict: dict[str, int] options_dict: dict[str, int]
@dataclass @dataclass(frozen=True)
class AirzoneSelectDescription(SelectEntityDescription, AirzoneSelectDescriptionMixin): class AirzoneSelectDescription(SelectEntityDescription, AirzoneSelectDescriptionMixin):
"""Class to describe an Airzone select entity.""" """Class to describe an Airzone select entity."""

View File

@ -34,7 +34,7 @@ from .entity import (
) )
@dataclass @dataclass(frozen=True)
class AirzoneBinarySensorEntityDescription(BinarySensorEntityDescription): class AirzoneBinarySensorEntityDescription(BinarySensorEntityDescription):
"""A class that describes Airzone Cloud binary sensor entities.""" """A class that describes Airzone Cloud binary sensor entities."""

View File

@ -23,14 +23,14 @@ from .const import DOMAIN
from .model import DoorDevice from .model import DoorDevice
@dataclass @dataclass(frozen=True)
class AccSensorEntityDescriptionMixin: class AccSensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable value_fn: Callable
@dataclass @dataclass(frozen=True)
class AccSensorEntityDescription( class AccSensorEntityDescription(
SensorEntityDescription, AccSensorEntityDescriptionMixin SensorEntityDescription, AccSensorEntityDescriptionMixin
): ):

View File

@ -63,14 +63,14 @@ TYPE_RELAY8 = "relay8"
TYPE_RELAY9 = "relay9" TYPE_RELAY9 = "relay9"
@dataclass @dataclass(frozen=True)
class AmbientBinarySensorDescriptionMixin: class AmbientBinarySensorDescriptionMixin:
"""Define an entity description mixin for binary sensors.""" """Define an entity description mixin for binary sensors."""
on_state: Literal[0, 1] on_state: Literal[0, 1]
@dataclass @dataclass(frozen=True)
class AmbientBinarySensorDescription( class AmbientBinarySensorDescription(
BinarySensorEntityDescription, AmbientBinarySensorDescriptionMixin BinarySensorEntityDescription, AmbientBinarySensorDescriptionMixin
): ):

View File

@ -35,7 +35,7 @@ if TYPE_CHECKING:
from . import AmcrestDevice from . import AmcrestDevice
@dataclass @dataclass(frozen=True)
class AmcrestSensorEntityDescription(BinarySensorEntityDescription): class AmcrestSensorEntityDescription(BinarySensorEntityDescription):
"""Describe Amcrest sensor entity.""" """Describe Amcrest sensor entity."""

View File

@ -23,14 +23,14 @@ from .coordinator import AndroidIPCamDataUpdateCoordinator
from .entity import AndroidIPCamBaseEntity from .entity import AndroidIPCamBaseEntity
@dataclass @dataclass(frozen=True)
class AndroidIPWebcamSensorEntityDescriptionMixin: class AndroidIPWebcamSensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[PyDroidIPCam], StateType] value_fn: Callable[[PyDroidIPCam], StateType]
@dataclass @dataclass(frozen=True)
class AndroidIPWebcamSensorEntityDescription( class AndroidIPWebcamSensorEntityDescription(
SensorEntityDescription, AndroidIPWebcamSensorEntityDescriptionMixin SensorEntityDescription, AndroidIPWebcamSensorEntityDescriptionMixin
): ):

View File

@ -18,7 +18,7 @@ from .coordinator import AndroidIPCamDataUpdateCoordinator
from .entity import AndroidIPCamBaseEntity from .entity import AndroidIPCamBaseEntity
@dataclass @dataclass(frozen=True)
class AndroidIPWebcamSwitchEntityDescriptionMixin: class AndroidIPWebcamSwitchEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -26,7 +26,7 @@ class AndroidIPWebcamSwitchEntityDescriptionMixin:
off_func: Callable[[PyDroidIPCam], Coroutine[Any, Any, bool]] off_func: Callable[[PyDroidIPCam], Coroutine[Any, Any, bool]]
@dataclass @dataclass(frozen=True)
class AndroidIPWebcamSwitchEntityDescription( class AndroidIPWebcamSwitchEntityDescription(
SwitchEntityDescription, AndroidIPWebcamSwitchEntityDescriptionMixin SwitchEntityDescription, AndroidIPWebcamSwitchEntityDescriptionMixin
): ):

View File

@ -23,14 +23,14 @@ from .entity import AnovaDescriptionEntity
from .models import AnovaData from .models import AnovaData
@dataclass @dataclass(frozen=True)
class AnovaSensorEntityDescriptionMixin: class AnovaSensorEntityDescriptionMixin:
"""Describes the mixin variables for anova sensors.""" """Describes the mixin variables for anova sensors."""
value_fn: Callable[[APCUpdateSensor], float | int | str] value_fn: Callable[[APCUpdateSensor], float | int | str]
@dataclass @dataclass(frozen=True)
class AnovaSensorEntityDescription( class AnovaSensorEntityDescription(
SensorEntityDescription, AnovaSensorEntityDescriptionMixin SensorEntityDescription, AnovaSensorEntityDescriptionMixin
): ):

View File

@ -19,7 +19,7 @@ from .coordinator import AOSmithCoordinator
from .entity import AOSmithEntity from .entity import AOSmithEntity
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class AOSmithSensorEntityDescription(SensorEntityDescription): class AOSmithSensorEntityDescription(SensorEntityDescription):
"""Define sensor entity description class.""" """Define sensor entity description class."""

View File

@ -26,7 +26,7 @@ from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from . import DOMAIN, UPDATE_TOPIC, AquaLogicProcessor from . import DOMAIN, UPDATE_TOPIC, AquaLogicProcessor
@dataclass @dataclass(frozen=True)
class AquaLogicSensorEntityDescription(SensorEntityDescription): class AquaLogicSensorEntityDescription(SensorEntityDescription):
"""Describes AquaLogic sensor entity.""" """Describes AquaLogic sensor entity."""

View File

@ -39,7 +39,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .const import DOMAIN
@dataclass @dataclass(frozen=True)
class AranetSensorEntityDescription(SensorEntityDescription): class AranetSensorEntityDescription(SensorEntityDescription):
"""Class to describe an Aranet sensor entity.""" """Class to describe an Aranet sensor entity."""

View File

@ -20,14 +20,14 @@ from .coordinator import AsekoDataUpdateCoordinator
from .entity import AsekoEntity from .entity import AsekoEntity
@dataclass @dataclass(frozen=True)
class AsekoBinarySensorDescriptionMixin: class AsekoBinarySensorDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[Unit], bool] value_fn: Callable[[Unit], bool]
@dataclass @dataclass(frozen=True)
class AsekoBinarySensorEntityDescription( class AsekoBinarySensorEntityDescription(
BinarySensorEntityDescription, AsekoBinarySensorDescriptionMixin BinarySensorEntityDescription, AsekoBinarySensorDescriptionMixin
): ):

View File

@ -38,7 +38,7 @@ from .const import (
from .router import AsusWrtRouter from .router import AsusWrtRouter
@dataclass @dataclass(frozen=True)
class AsusWrtSensorEntityDescription(SensorEntityDescription): class AsusWrtSensorEntityDescription(SensorEntityDescription):
"""A class that describes AsusWrt sensor entities.""" """A class that describes AsusWrt sensor entities."""

View File

@ -105,12 +105,12 @@ def _native_datetime() -> datetime:
return datetime.now() return datetime.now()
@dataclass @dataclass(frozen=True)
class AugustBinarySensorEntityDescription(BinarySensorEntityDescription): class AugustBinarySensorEntityDescription(BinarySensorEntityDescription):
"""Describes August binary_sensor entity.""" """Describes August binary_sensor entity."""
@dataclass @dataclass(frozen=True)
class AugustDoorbellRequiredKeysMixin: class AugustDoorbellRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -118,7 +118,7 @@ class AugustDoorbellRequiredKeysMixin:
is_time_based: bool is_time_based: bool
@dataclass @dataclass(frozen=True)
class AugustDoorbellBinarySensorEntityDescription( class AugustDoorbellBinarySensorEntityDescription(
BinarySensorEntityDescription, AugustDoorbellRequiredKeysMixin BinarySensorEntityDescription, AugustDoorbellRequiredKeysMixin
): ):

View File

@ -63,14 +63,14 @@ def _retrieve_linked_keypad_battery_state(detail: KeypadDetail) -> int | None:
_T = TypeVar("_T", LockDetail, KeypadDetail) _T = TypeVar("_T", LockDetail, KeypadDetail)
@dataclass @dataclass(frozen=True)
class AugustRequiredKeysMixin(Generic[_T]): class AugustRequiredKeysMixin(Generic[_T]):
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[_T], int | None] value_fn: Callable[[_T], int | None]
@dataclass @dataclass(frozen=True)
class AugustSensorEntityDescription( class AugustSensorEntityDescription(
SensorEntityDescription, AugustRequiredKeysMixin[_T] SensorEntityDescription, AugustRequiredKeysMixin[_T]
): ):

View File

@ -23,7 +23,7 @@ from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, SERVICE_ID from .const import DOMAIN, SERVICE_ID
@dataclass @dataclass(frozen=True)
class SensorValueEntityDescription(SensorEntityDescription): class SensorValueEntityDescription(SensorEntityDescription):
"""Class describing Aussie Broadband sensor entities.""" """Class describing Aussie Broadband sensor entities."""

View File

@ -50,14 +50,14 @@ from .coordinator import AwairDataUpdateCoordinator, AwairResult
DUST_ALIASES = [API_PM25, API_PM10] DUST_ALIASES = [API_PM25, API_PM10]
@dataclass @dataclass(frozen=True)
class AwairRequiredKeysMixin: class AwairRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
unique_id_tag: str unique_id_tag: str
@dataclass @dataclass(frozen=True)
class AwairSensorEntityDescription(SensorEntityDescription, AwairRequiredKeysMixin): class AwairSensorEntityDescription(SensorEntityDescription, AwairRequiredKeysMixin):
"""Describes Awair sensor entity.""" """Describes Awair sensor entity."""

View File

@ -32,7 +32,7 @@ PLATFORMS = [Platform.SENSOR]
BUILDS_QUERY: Final = "?queryOrder=queueTimeDescending&maxBuildsPerDefinition=1" BUILDS_QUERY: Final = "?queryOrder=queueTimeDescending&maxBuildsPerDefinition=1"
@dataclass @dataclass(frozen=True)
class AzureDevOpsEntityDescription(EntityDescription): class AzureDevOpsEntityDescription(EntityDescription):
"""Class describing Azure DevOps entities.""" """Class describing Azure DevOps entities."""

View File

@ -17,14 +17,14 @@ from . import AzureDevOpsDeviceEntity, AzureDevOpsEntityDescription
from .const import CONF_ORG, DOMAIN from .const import CONF_ORG, DOMAIN
@dataclass @dataclass(frozen=True)
class AzureDevOpsSensorEntityDescriptionMixin: class AzureDevOpsSensorEntityDescriptionMixin:
"""Mixin class for required Azure DevOps sensor description keys.""" """Mixin class for required Azure DevOps sensor description keys."""
build_key: int build_key: int
@dataclass @dataclass(frozen=True)
class AzureDevOpsSensorEntityDescription( class AzureDevOpsSensorEntityDescription(
AzureDevOpsEntityDescription, AzureDevOpsEntityDescription,
SensorEntityDescription, SensorEntityDescription,

View File

@ -21,14 +21,14 @@ from .entity import BAFEntity
from .models import BAFData from .models import BAFData
@dataclass @dataclass(frozen=True)
class BAFBinarySensorDescriptionMixin: class BAFBinarySensorDescriptionMixin:
"""Required values for BAF binary sensors.""" """Required values for BAF binary sensors."""
value_fn: Callable[[Device], bool | None] value_fn: Callable[[Device], bool | None]
@dataclass @dataclass(frozen=True)
class BAFBinarySensorDescription( class BAFBinarySensorDescription(
BinarySensorEntityDescription, BinarySensorEntityDescription,
BAFBinarySensorDescriptionMixin, BAFBinarySensorDescriptionMixin,

View File

@ -22,14 +22,14 @@ from .entity import BAFEntity
from .models import BAFData from .models import BAFData
@dataclass @dataclass(frozen=True)
class BAFNumberDescriptionMixin: class BAFNumberDescriptionMixin:
"""Required values for BAF sensors.""" """Required values for BAF sensors."""
value_fn: Callable[[Device], int | None] value_fn: Callable[[Device], int | None]
@dataclass @dataclass(frozen=True)
class BAFNumberDescription(NumberEntityDescription, BAFNumberDescriptionMixin): class BAFNumberDescription(NumberEntityDescription, BAFNumberDescriptionMixin):
"""Class describing BAF sensor entities.""" """Class describing BAF sensor entities."""

View File

@ -28,14 +28,14 @@ from .entity import BAFEntity
from .models import BAFData from .models import BAFData
@dataclass @dataclass(frozen=True)
class BAFSensorDescriptionMixin: class BAFSensorDescriptionMixin:
"""Required values for BAF sensors.""" """Required values for BAF sensors."""
value_fn: Callable[[Device], int | float | str | None] value_fn: Callable[[Device], int | float | str | None]
@dataclass @dataclass(frozen=True)
class BAFSensorDescription( class BAFSensorDescription(
SensorEntityDescription, SensorEntityDescription,
BAFSensorDescriptionMixin, BAFSensorDescriptionMixin,

View File

@ -18,14 +18,14 @@ from .entity import BAFEntity
from .models import BAFData from .models import BAFData
@dataclass @dataclass(frozen=True)
class BAFSwitchDescriptionMixin: class BAFSwitchDescriptionMixin:
"""Required values for BAF sensors.""" """Required values for BAF sensors."""
value_fn: Callable[[Device], bool | None] value_fn: Callable[[Device], bool | None]
@dataclass @dataclass(frozen=True)
class BAFSwitchDescription( class BAFSwitchDescription(
SwitchEntityDescription, SwitchEntityDescription,
BAFSwitchDescriptionMixin, BAFSwitchDescriptionMixin,

View File

@ -33,7 +33,7 @@ async def async_setup_entry(
async_add_entities(entities) async_add_entities(entities)
@dataclass @dataclass(frozen=True)
class BalboaBinarySensorEntityDescriptionMixin: class BalboaBinarySensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -41,7 +41,7 @@ class BalboaBinarySensorEntityDescriptionMixin:
on_off_icons: tuple[str, str] on_off_icons: tuple[str, str]
@dataclass @dataclass(frozen=True)
class BalboaBinarySensorEntityDescription( class BalboaBinarySensorEntityDescription(
BinarySensorEntityDescription, BalboaBinarySensorEntityDescriptionMixin BinarySensorEntityDescription, BalboaBinarySensorEntityDescriptionMixin
): ):

View File

@ -109,14 +109,14 @@ def _format_cbs_report(
return result return result
@dataclass @dataclass(frozen=True)
class BMWRequiredKeysMixin: class BMWRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[MyBMWVehicle], bool] value_fn: Callable[[MyBMWVehicle], bool]
@dataclass @dataclass(frozen=True)
class BMWBinarySensorEntityDescription( class BMWBinarySensorEntityDescription(
BinarySensorEntityDescription, BMWRequiredKeysMixin BinarySensorEntityDescription, BMWRequiredKeysMixin
): ):

View File

@ -25,14 +25,14 @@ if TYPE_CHECKING:
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BMWRequiredKeysMixin: class BMWRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
remote_function: Callable[[MyBMWVehicle], Coroutine[Any, Any, RemoteServiceStatus]] remote_function: Callable[[MyBMWVehicle], Coroutine[Any, Any, RemoteServiceStatus]]
@dataclass @dataclass(frozen=True)
class BMWButtonEntityDescription(ButtonEntityDescription, BMWRequiredKeysMixin): class BMWButtonEntityDescription(ButtonEntityDescription, BMWRequiredKeysMixin):
"""Class describing BMW button entities.""" """Class describing BMW button entities."""

View File

@ -26,7 +26,7 @@ from .coordinator import BMWDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BMWRequiredKeysMixin: class BMWRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -34,7 +34,7 @@ class BMWRequiredKeysMixin:
remote_service: Callable[[MyBMWVehicle, float | int], Coroutine[Any, Any, Any]] remote_service: Callable[[MyBMWVehicle, float | int], Coroutine[Any, Any, Any]]
@dataclass @dataclass(frozen=True)
class BMWNumberEntityDescription(NumberEntityDescription, BMWRequiredKeysMixin): class BMWNumberEntityDescription(NumberEntityDescription, BMWRequiredKeysMixin):
"""Describes BMW number entity.""" """Describes BMW number entity."""

View File

@ -22,7 +22,7 @@ from .coordinator import BMWDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BMWRequiredKeysMixin: class BMWRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -30,7 +30,7 @@ class BMWRequiredKeysMixin:
remote_service: Callable[[MyBMWVehicle, str], Coroutine[Any, Any, Any]] remote_service: Callable[[MyBMWVehicle, str], Coroutine[Any, Any, Any]]
@dataclass @dataclass(frozen=True)
class BMWSelectEntityDescription(SelectEntityDescription, BMWRequiredKeysMixin): class BMWSelectEntityDescription(SelectEntityDescription, BMWRequiredKeysMixin):
"""Describes BMW sensor entity.""" """Describes BMW sensor entity."""

View File

@ -28,7 +28,7 @@ from .coordinator import BMWDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BMWSensorEntityDescription(SensorEntityDescription): class BMWSensorEntityDescription(SensorEntityDescription):
"""Describes BMW sensor entity.""" """Describes BMW sensor entity."""

View File

@ -22,7 +22,7 @@ from .coordinator import BMWDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BMWRequiredKeysMixin: class BMWRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -31,7 +31,7 @@ class BMWRequiredKeysMixin:
remote_service_off: Callable[[MyBMWVehicle], Coroutine[Any, Any, Any]] remote_service_off: Callable[[MyBMWVehicle], Coroutine[Any, Any, Any]]
@dataclass @dataclass(frozen=True)
class BMWSwitchEntityDescription(SwitchEntityDescription, BMWRequiredKeysMixin): class BMWSwitchEntityDescription(SwitchEntityDescription, BMWRequiredKeysMixin):
"""Describes BMW switch entity.""" """Describes BMW switch entity."""

View File

@ -21,7 +21,7 @@ from .utils import BondDevice, BondHub
STEP_SIZE = 10 STEP_SIZE = 10
@dataclass @dataclass(frozen=True)
class BondButtonEntityDescriptionMixin: class BondButtonEntityDescriptionMixin:
"""Mixin to describe a Bond Button entity.""" """Mixin to describe a Bond Button entity."""
@ -29,7 +29,7 @@ class BondButtonEntityDescriptionMixin:
argument: int | None argument: int | None
@dataclass @dataclass(frozen=True)
class BondButtonEntityDescription( class BondButtonEntityDescription(
ButtonEntityDescription, BondButtonEntityDescriptionMixin ButtonEntityDescription, BondButtonEntityDescriptionMixin
): ):

View File

@ -29,7 +29,7 @@ from .const import DATA_SESSION, DOMAIN
from .entity import SHCEntity from .entity import SHCEntity
@dataclass @dataclass(frozen=True)
class SHCSwitchRequiredKeysMixin: class SHCSwitchRequiredKeysMixin:
"""Mixin for SHC switch required keys.""" """Mixin for SHC switch required keys."""
@ -38,7 +38,7 @@ class SHCSwitchRequiredKeysMixin:
should_poll: bool should_poll: bool
@dataclass @dataclass(frozen=True)
class SHCSwitchEntityDescription( class SHCSwitchEntityDescription(
SwitchEntityDescription, SwitchEntityDescription,
SHCSwitchRequiredKeysMixin, SHCSwitchRequiredKeysMixin,

View File

@ -19,14 +19,14 @@ from .coordinator import BraviaTVCoordinator
from .entity import BraviaTVEntity from .entity import BraviaTVEntity
@dataclass @dataclass(frozen=True)
class BraviaTVButtonDescriptionMixin: class BraviaTVButtonDescriptionMixin:
"""Mixin to describe a Bravia TV Button entity.""" """Mixin to describe a Bravia TV Button entity."""
press_action: Callable[[BraviaTVCoordinator], Coroutine] press_action: Callable[[BraviaTVCoordinator], Coroutine]
@dataclass @dataclass(frozen=True)
class BraviaTVButtonDescription( class BraviaTVButtonDescription(
ButtonEntityDescription, BraviaTVButtonDescriptionMixin ButtonEntityDescription, BraviaTVButtonDescriptionMixin
): ):

View File

@ -35,14 +35,14 @@ UNIT_PAGES = "p"
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class BrotherSensorRequiredKeysMixin: class BrotherSensorRequiredKeysMixin:
"""Class for Brother entity required keys.""" """Class for Brother entity required keys."""
value: Callable[[BrotherSensors], StateType | datetime] value: Callable[[BrotherSensors], StateType | datetime]
@dataclass @dataclass(frozen=True)
class BrotherSensorEntityDescription( class BrotherSensorEntityDescription(
SensorEntityDescription, BrotherSensorRequiredKeysMixin SensorEntityDescription, BrotherSensorRequiredKeysMixin
): ):

View File

@ -22,7 +22,7 @@ from .const import ATTRIBUTION, DOMAIN
from .coordinator import CO2SignalCoordinator from .coordinator import CO2SignalCoordinator
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class CO2SensorEntityDescription(SensorEntityDescription): class CO2SensorEntityDescription(SensorEntityDescription):
"""Provide a description of a CO2 sensor.""" """Provide a description of a CO2 sensor."""

View File

@ -79,14 +79,14 @@ ATTR_SUPPLY_TEMPERATURE = "supply_temperature"
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class ComfoconnectRequiredKeysMixin: class ComfoconnectRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
sensor_id: int sensor_id: int
@dataclass @dataclass(frozen=True)
class ComfoconnectSensorEntityDescription( class ComfoconnectSensorEntityDescription(
SensorEntityDescription, ComfoconnectRequiredKeysMixin SensorEntityDescription, ComfoconnectRequiredKeysMixin
): ):

View File

@ -39,14 +39,14 @@ from .const import (
) )
@dataclass @dataclass(frozen=True)
class DaikinRequiredKeysMixin: class DaikinRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_func: Callable[[Appliance], float | None] value_func: Callable[[Appliance], float | None]
@dataclass @dataclass(frozen=True)
class DaikinSensorEntityDescription(SensorEntityDescription, DaikinRequiredKeysMixin): class DaikinSensorEntityDescription(SensorEntityDescription, DaikinRequiredKeysMixin):
"""Describes Daikin sensor entity.""" """Describes Daikin sensor entity."""

View File

@ -65,7 +65,7 @@ T = TypeVar(
) )
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DeconzBinarySensorDescription(Generic[T], BinarySensorEntityDescription): class DeconzBinarySensorDescription(Generic[T], BinarySensorEntityDescription):
"""Class describing deCONZ binary sensor entities.""" """Class describing deCONZ binary sensor entities."""

View File

@ -23,7 +23,7 @@ from .deconz_device import DeconzDevice, DeconzSceneMixin
from .gateway import DeconzGateway, get_gateway_from_config_entry from .gateway import DeconzGateway, get_gateway_from_config_entry
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DeconzButtonDescription(ButtonEntityDescription): class DeconzButtonDescription(ButtonEntityDescription):
"""Class describing deCONZ button entities.""" """Class describing deCONZ button entities."""

View File

@ -31,7 +31,7 @@ from .util import serial_from_unique_id
T = TypeVar("T", Presence, PydeconzSensorBase) T = TypeVar("T", Presence, PydeconzSensorBase)
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DeconzNumberDescription(Generic[T], NumberEntityDescription): class DeconzNumberDescription(Generic[T], NumberEntityDescription):
"""Class describing deCONZ number entities.""" """Class describing deCONZ number entities."""

View File

@ -93,7 +93,7 @@ T = TypeVar(
) )
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DeconzSensorDescription(Generic[T], SensorEntityDescription): class DeconzSensorDescription(Generic[T], SensorEntityDescription):
"""Class describing deCONZ binary sensor entities.""" """Class describing deCONZ binary sensor entities."""

View File

@ -38,7 +38,7 @@ def get_state(data: dict[str, float], key: str) -> str | float:
return round(kb_spd, 2 if kb_spd < 0.1 else 1) return round(kb_spd, 2 if kb_spd < 0.1 else 1)
@dataclass @dataclass(frozen=True)
class DelugeSensorEntityDescription(SensorEntityDescription): class DelugeSensorEntityDescription(SensorEntityDescription):
"""Class to describe a Deluge sensor.""" """Class to describe a Deluge sensor."""

View File

@ -32,14 +32,14 @@ def _is_connected_to_router(entity: DevoloBinarySensorEntity) -> bool:
) )
@dataclass @dataclass(frozen=True)
class DevoloBinarySensorRequiredKeysMixin: class DevoloBinarySensorRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_func: Callable[[DevoloBinarySensorEntity], bool] value_func: Callable[[DevoloBinarySensorEntity], bool]
@dataclass @dataclass(frozen=True)
class DevoloBinarySensorEntityDescription( class DevoloBinarySensorEntityDescription(
BinarySensorEntityDescription, DevoloBinarySensorRequiredKeysMixin BinarySensorEntityDescription, DevoloBinarySensorRequiredKeysMixin
): ):

View File

@ -22,14 +22,14 @@ from .const import DOMAIN, IDENTIFY, PAIRING, RESTART, START_WPS
from .entity import DevoloEntity from .entity import DevoloEntity
@dataclass @dataclass(frozen=True)
class DevoloButtonRequiredKeysMixin: class DevoloButtonRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
press_func: Callable[[Device], Awaitable[bool]] press_func: Callable[[Device], Awaitable[bool]]
@dataclass @dataclass(frozen=True)
class DevoloButtonEntityDescription( class DevoloButtonEntityDescription(
ButtonEntityDescription, DevoloButtonRequiredKeysMixin ButtonEntityDescription, DevoloButtonRequiredKeysMixin
): ):

View File

@ -21,14 +21,14 @@ from .const import DOMAIN, IMAGE_GUEST_WIFI, SWITCH_GUEST_WIFI
from .entity import DevoloCoordinatorEntity from .entity import DevoloCoordinatorEntity
@dataclass @dataclass(frozen=True)
class DevoloImageRequiredKeysMixin: class DevoloImageRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
image_func: Callable[[WifiGuestAccessGet], bytes] image_func: Callable[[WifiGuestAccessGet], bytes]
@dataclass @dataclass(frozen=True)
class DevoloImageEntityDescription( class DevoloImageEntityDescription(
ImageEntityDescription, DevoloImageRequiredKeysMixin ImageEntityDescription, DevoloImageRequiredKeysMixin
): ):

View File

@ -49,14 +49,14 @@ class DataRateDirection(StrEnum):
TX = "tx_rate" TX = "tx_rate"
@dataclass @dataclass(frozen=True)
class DevoloSensorRequiredKeysMixin(Generic[_CoordinatorDataT]): class DevoloSensorRequiredKeysMixin(Generic[_CoordinatorDataT]):
"""Mixin for required keys.""" """Mixin for required keys."""
value_func: Callable[[_CoordinatorDataT], float] value_func: Callable[[_CoordinatorDataT], float]
@dataclass @dataclass(frozen=True)
class DevoloSensorEntityDescription( class DevoloSensorEntityDescription(
SensorEntityDescription, DevoloSensorRequiredKeysMixin[_CoordinatorDataT] SensorEntityDescription, DevoloSensorRequiredKeysMixin[_CoordinatorDataT]
): ):

View File

@ -23,7 +23,7 @@ from .entity import DevoloCoordinatorEntity
_DataT = TypeVar("_DataT", bound=WifiGuestAccessGet | bool) _DataT = TypeVar("_DataT", bound=WifiGuestAccessGet | bool)
@dataclass @dataclass(frozen=True)
class DevoloSwitchRequiredKeysMixin(Generic[_DataT]): class DevoloSwitchRequiredKeysMixin(Generic[_DataT]):
"""Mixin for required keys.""" """Mixin for required keys."""
@ -32,7 +32,7 @@ class DevoloSwitchRequiredKeysMixin(Generic[_DataT]):
turn_off_func: Callable[[Device], Awaitable[bool]] turn_off_func: Callable[[Device], Awaitable[bool]]
@dataclass @dataclass(frozen=True)
class DevoloSwitchEntityDescription( class DevoloSwitchEntityDescription(
SwitchEntityDescription, DevoloSwitchRequiredKeysMixin[_DataT] SwitchEntityDescription, DevoloSwitchRequiredKeysMixin[_DataT]
): ):

View File

@ -26,7 +26,7 @@ from .const import DOMAIN, REGULAR_FIRMWARE
from .entity import DevoloCoordinatorEntity from .entity import DevoloCoordinatorEntity
@dataclass @dataclass(frozen=True)
class DevoloUpdateRequiredKeysMixin: class DevoloUpdateRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -34,7 +34,7 @@ class DevoloUpdateRequiredKeysMixin:
update_func: Callable[[Device], Awaitable[bool]] update_func: Callable[[Device], Awaitable[bool]]
@dataclass @dataclass(frozen=True)
class DevoloUpdateEntityDescription( class DevoloUpdateEntityDescription(
UpdateEntityDescription, DevoloUpdateRequiredKeysMixin UpdateEntityDescription, DevoloUpdateRequiredKeysMixin
): ):

View File

@ -35,7 +35,7 @@ def _get_and_scale(reading: Reading, key: str, scale: int) -> datetime | float |
return None return None
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DiscovergySensorEntityDescription(SensorEntityDescription): class DiscovergySensorEntityDescription(SensorEntityDescription):
"""Class to describe a Discovergy sensor entity.""" """Class to describe a Discovergy sensor entity."""

View File

@ -17,14 +17,14 @@ from .models import DoorBirdData
IR_RELAY = "__ir_light__" IR_RELAY = "__ir_light__"
@dataclass @dataclass(frozen=True)
class DoorbirdButtonEntityDescriptionMixin: class DoorbirdButtonEntityDescriptionMixin:
"""Mixin to describe a Doorbird Button entity.""" """Mixin to describe a Doorbird Button entity."""
press_action: Callable[[DoorBird, str], None] press_action: Callable[[DoorBird, str], None]
@dataclass @dataclass(frozen=True)
class DoorbirdButtonEntityDescription( class DoorbirdButtonEntityDescription(
ButtonEntityDescription, DoorbirdButtonEntityDescriptionMixin ButtonEntityDescription, DoorbirdButtonEntityDescriptionMixin
): ):

View File

@ -22,14 +22,14 @@ from .entity import DormakabaDkeyEntity
from .models import DormakabaDkeyData from .models import DormakabaDkeyData
@dataclass @dataclass(frozen=True)
class DormakabaDkeyBinarySensorDescriptionMixin: class DormakabaDkeyBinarySensorDescriptionMixin:
"""Class for keys required by Dormakaba dKey binary sensor entity.""" """Class for keys required by Dormakaba dKey binary sensor entity."""
is_on: Callable[[Notifications], bool] is_on: Callable[[Notifications], bool]
@dataclass @dataclass(frozen=True)
class DormakabaDkeyBinarySensorDescription( class DormakabaDkeyBinarySensorDescription(
BinarySensorEntityDescription, DormakabaDkeyBinarySensorDescriptionMixin BinarySensorEntityDescription, DormakabaDkeyBinarySensorDescriptionMixin
): ):

View File

@ -30,14 +30,14 @@ SENSOR_NETWORK = "network"
SENSOR_SMS_UNREAD = "sms" SENSOR_SMS_UNREAD = "sms"
@dataclass @dataclass(frozen=True)
class DovadoRequiredKeysMixin: class DovadoRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
identifier: str identifier: str
@dataclass @dataclass(frozen=True)
class DovadoSensorEntityDescription(SensorEntityDescription, DovadoRequiredKeysMixin): class DovadoSensorEntityDescription(SensorEntityDescription, DovadoRequiredKeysMixin):
"""Describes Dovado sensor entity.""" """Describes Dovado sensor entity."""

View File

@ -19,14 +19,14 @@ from .const import DOMAIN
from .entity import Dremel3DPrinterEntity from .entity import Dremel3DPrinterEntity
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterBinarySensorEntityMixin: class Dremel3DPrinterBinarySensorEntityMixin:
"""Mixin for Dremel 3D Printer binary sensor.""" """Mixin for Dremel 3D Printer binary sensor."""
value_fn: Callable[[Dremel3DPrinter], bool] value_fn: Callable[[Dremel3DPrinter], bool]
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterBinarySensorEntityDescription( class Dremel3DPrinterBinarySensorEntityDescription(
BinarySensorEntityDescription, Dremel3DPrinterBinarySensorEntityMixin BinarySensorEntityDescription, Dremel3DPrinterBinarySensorEntityMixin
): ):

View File

@ -16,14 +16,14 @@ from .const import DOMAIN
from .entity import Dremel3DPrinterEntity from .entity import Dremel3DPrinterEntity
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterButtonEntityMixin: class Dremel3DPrinterButtonEntityMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
press_fn: Callable[[Dremel3DPrinter], None] press_fn: Callable[[Dremel3DPrinter], None]
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterButtonEntityDescription( class Dremel3DPrinterButtonEntityDescription(
ButtonEntityDescription, Dremel3DPrinterButtonEntityMixin ButtonEntityDescription, Dremel3DPrinterButtonEntityMixin
): ):

View File

@ -31,14 +31,14 @@ from .const import ATTR_EXTRUDER, ATTR_PLATFORM, DOMAIN
from .entity import Dremel3DPrinterEntity from .entity import Dremel3DPrinterEntity
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterSensorEntityMixin: class Dremel3DPrinterSensorEntityMixin:
"""Mixin for Dremel 3D Printer sensor.""" """Mixin for Dremel 3D Printer sensor."""
value_fn: Callable[[Dremel3DPrinter, str], StateType | datetime] value_fn: Callable[[Dremel3DPrinter, str], StateType | datetime]
@dataclass @dataclass(frozen=True)
class Dremel3DPrinterSensorEntityDescription( class Dremel3DPrinterSensorEntityDescription(
SensorEntityDescription, Dremel3DPrinterSensorEntityMixin SensorEntityDescription, Dremel3DPrinterSensorEntityMixin
): ):

View File

@ -67,7 +67,7 @@ EVENT_FIRST_TELEGRAM = "dsmr_first_telegram_{}"
UNIT_CONVERSION = {"m3": UnitOfVolume.CUBIC_METERS} UNIT_CONVERSION = {"m3": UnitOfVolume.CUBIC_METERS}
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class DSMRSensorEntityDescription(SensorEntityDescription): class DSMRSensorEntityDescription(SensorEntityDescription):
"""Represents an DSMR Sensor.""" """Represents an DSMR Sensor."""

View File

@ -38,7 +38,7 @@ def tariff_transform(value):
return "high" return "high"
@dataclass @dataclass(frozen=True)
class DSMRReaderSensorEntityDescription(SensorEntityDescription): class DSMRReaderSensorEntityDescription(SensorEntityDescription):
"""Sensor entity description for DSMR Reader.""" """Sensor entity description for DSMR Reader."""

View File

@ -29,7 +29,7 @@ from .const import DOMAIN, SERVICE_TYPE_DEVICE_NAMES
from .coordinator import EasyEnergyData, EasyEnergyDataUpdateCoordinator from .coordinator import EasyEnergyData, EasyEnergyDataUpdateCoordinator
@dataclass @dataclass(frozen=True)
class EasyEnergySensorEntityDescriptionMixin: class EasyEnergySensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -37,7 +37,7 @@ class EasyEnergySensorEntityDescriptionMixin:
service_type: str service_type: str
@dataclass @dataclass(frozen=True)
class EasyEnergySensorEntityDescription( class EasyEnergySensorEntityDescription(
SensorEntityDescription, EasyEnergySensorEntityDescriptionMixin SensorEntityDescription, EasyEnergySensorEntityDescriptionMixin
): ):

View File

@ -18,7 +18,7 @@ from .entity import EcobeeBaseEntity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class EcobeeNumberEntityDescriptionBase: class EcobeeNumberEntityDescriptionBase:
"""Required values when describing Ecobee number entities.""" """Required values when describing Ecobee number entities."""
@ -26,7 +26,7 @@ class EcobeeNumberEntityDescriptionBase:
set_fn: Callable[[EcobeeData, int, int], Awaitable] set_fn: Callable[[EcobeeData, int, int], Awaitable]
@dataclass @dataclass(frozen=True)
class EcobeeNumberEntityDescription( class EcobeeNumberEntityDescription(
NumberEntityDescription, EcobeeNumberEntityDescriptionBase NumberEntityDescription, EcobeeNumberEntityDescriptionBase
): ):

View File

@ -25,14 +25,14 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN, ECOBEE_MODEL_TO_NAME, MANUFACTURER from .const import DOMAIN, ECOBEE_MODEL_TO_NAME, MANUFACTURER
@dataclass @dataclass(frozen=True)
class EcobeeSensorEntityDescriptionMixin: class EcobeeSensorEntityDescriptionMixin:
"""Represent the required ecobee entity description attributes.""" """Represent the required ecobee entity description attributes."""
runtime_key: str | None runtime_key: str | None
@dataclass @dataclass(frozen=True)
class EcobeeSensorEntityDescription( class EcobeeSensorEntityDescription(
SensorEntityDescription, EcobeeSensorEntityDescriptionMixin SensorEntityDescription, EcobeeSensorEntityDescriptionMixin
): ):

View File

@ -16,14 +16,14 @@ from .coordinator import EcoforestCoordinator
from .entity import EcoforestEntity from .entity import EcoforestEntity
@dataclass @dataclass(frozen=True)
class EcoforestRequiredKeysMixin: class EcoforestRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[Device], float | None] value_fn: Callable[[Device], float | None]
@dataclass @dataclass(frozen=True)
class EcoforestNumberEntityDescription( class EcoforestNumberEntityDescription(
NumberEntityDescription, EcoforestRequiredKeysMixin NumberEntityDescription, EcoforestRequiredKeysMixin
): ):

View File

@ -33,14 +33,14 @@ STATUS_TYPE = [s.value for s in State]
ALARM_TYPE = [a.value for a in Alarm] + ["none"] ALARM_TYPE = [a.value for a in Alarm] + ["none"]
@dataclass @dataclass(frozen=True)
class EcoforestRequiredKeysMixin: class EcoforestRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[Device], StateType] value_fn: Callable[[Device], StateType]
@dataclass @dataclass(frozen=True)
class EcoforestSensorEntityDescription( class EcoforestSensorEntityDescription(
SensorEntityDescription, EcoforestRequiredKeysMixin SensorEntityDescription, EcoforestRequiredKeysMixin
): ):

View File

@ -17,7 +17,7 @@ from .coordinator import EcoforestCoordinator
from .entity import EcoforestEntity from .entity import EcoforestEntity
@dataclass @dataclass(frozen=True)
class EcoforestSwitchRequiredKeysMixin: class EcoforestSwitchRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -25,7 +25,7 @@ class EcoforestSwitchRequiredKeysMixin:
switch_fn: Callable[[EcoforestApi, bool], Awaitable[Device]] switch_fn: Callable[[EcoforestApi, bool], Awaitable[Device]]
@dataclass @dataclass(frozen=True)
class EcoforestSwitchEntityDescription( class EcoforestSwitchEntityDescription(
SwitchEntityDescription, EcoforestSwitchRequiredKeysMixin SwitchEntityDescription, EcoforestSwitchRequiredKeysMixin
): ):

View File

@ -28,14 +28,14 @@ ATTR_EK_HOP_START = "hop_sensor_start"
ATTR_EK_HOP_END = "hop_sensor_end" ATTR_EK_HOP_END = "hop_sensor_end"
@dataclass @dataclass(frozen=True)
class ElectricKiwiHOPRequiredKeysMixin: class ElectricKiwiHOPRequiredKeysMixin:
"""Mixin for required HOP keys.""" """Mixin for required HOP keys."""
value_func: Callable[[Hop], datetime] value_func: Callable[[Hop], datetime]
@dataclass @dataclass(frozen=True)
class ElectricKiwiHOPSensorEntityDescription( class ElectricKiwiHOPSensorEntityDescription(
SensorEntityDescription, SensorEntityDescription,
ElectricKiwiHOPRequiredKeysMixin, ElectricKiwiHOPRequiredKeysMixin,

View File

@ -23,7 +23,7 @@ from .coordinator import ElgatoDataUpdateCoordinator
from .entity import ElgatoEntity from .entity import ElgatoEntity
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class ElgatoButtonEntityDescription(ButtonEntityDescription): class ElgatoButtonEntityDescription(ButtonEntityDescription):
"""Class describing Elgato button entities.""" """Class describing Elgato button entities."""

View File

@ -26,7 +26,7 @@ from .coordinator import ElgatoData, ElgatoDataUpdateCoordinator
from .entity import ElgatoEntity from .entity import ElgatoEntity
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class ElgatoSensorEntityDescription(SensorEntityDescription): class ElgatoSensorEntityDescription(SensorEntityDescription):
"""Class describing Elgato sensor entities.""" """Class describing Elgato sensor entities."""

View File

@ -19,7 +19,7 @@ from .coordinator import ElgatoData, ElgatoDataUpdateCoordinator
from .entity import ElgatoEntity from .entity import ElgatoEntity
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class ElgatoSwitchEntityDescription(SwitchEntityDescription): class ElgatoSwitchEntityDescription(SwitchEntityDescription):
"""Class describing Elgato switch entities.""" """Class describing Elgato switch entities."""

View File

@ -29,7 +29,7 @@ from .const import DOMAIN, SERVICE_TYPE_DEVICE_NAMES
from .coordinator import EnergyZeroData, EnergyZeroDataUpdateCoordinator from .coordinator import EnergyZeroData, EnergyZeroDataUpdateCoordinator
@dataclass @dataclass(frozen=True)
class EnergyZeroSensorEntityDescriptionMixin: class EnergyZeroSensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -37,7 +37,7 @@ class EnergyZeroSensorEntityDescriptionMixin:
service_type: str service_type: str
@dataclass @dataclass(frozen=True)
class EnergyZeroSensorEntityDescription( class EnergyZeroSensorEntityDescription(
SensorEntityDescription, EnergyZeroSensorEntityDescriptionMixin SensorEntityDescription, EnergyZeroSensorEntityDescriptionMixin
): ):

View File

@ -44,14 +44,14 @@ SENSOR_TYPE_TEMPERATURE = "temperature"
SENSOR_TYPE_WINDOWHANDLE = "windowhandle" SENSOR_TYPE_WINDOWHANDLE = "windowhandle"
@dataclass @dataclass(frozen=True)
class EnOceanSensorEntityDescriptionMixin: class EnOceanSensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
unique_id: Callable[[list[int]], str | None] unique_id: Callable[[list[int]], str | None]
@dataclass @dataclass(frozen=True)
class EnOceanSensorEntityDescription( class EnOceanSensorEntityDescription(
SensorEntityDescription, EnOceanSensorEntityDescriptionMixin SensorEntityDescription, EnOceanSensorEntityDescriptionMixin
): ):

View File

@ -22,14 +22,14 @@ from .coordinator import EnphaseUpdateCoordinator
from .entity import EnvoyBaseEntity from .entity import EnvoyBaseEntity
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeRequiredKeysMixin: class EnvoyEnchargeRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEncharge], bool] value_fn: Callable[[EnvoyEncharge], bool]
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeBinarySensorEntityDescription( class EnvoyEnchargeBinarySensorEntityDescription(
BinarySensorEntityDescription, EnvoyEnchargeRequiredKeysMixin BinarySensorEntityDescription, EnvoyEnchargeRequiredKeysMixin
): ):
@ -53,14 +53,14 @@ ENCHARGE_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerRequiredKeysMixin: class EnvoyEnpowerRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEnpower], bool] value_fn: Callable[[EnvoyEnpower], bool]
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerBinarySensorEntityDescription( class EnvoyEnpowerBinarySensorEntityDescription(
BinarySensorEntityDescription, EnvoyEnpowerRequiredKeysMixin BinarySensorEntityDescription, EnvoyEnpowerRequiredKeysMixin
): ):

View File

@ -25,21 +25,21 @@ from .coordinator import EnphaseUpdateCoordinator
from .entity import EnvoyBaseEntity from .entity import EnvoyBaseEntity
@dataclass @dataclass(frozen=True)
class EnvoyRelayRequiredKeysMixin: class EnvoyRelayRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyDryContactSettings], float] value_fn: Callable[[EnvoyDryContactSettings], float]
@dataclass @dataclass(frozen=True)
class EnvoyRelayNumberEntityDescription( class EnvoyRelayNumberEntityDescription(
NumberEntityDescription, EnvoyRelayRequiredKeysMixin NumberEntityDescription, EnvoyRelayRequiredKeysMixin
): ):
"""Describes an Envoy Dry Contact Relay number entity.""" """Describes an Envoy Dry Contact Relay number entity."""
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsRequiredKeysMixin: class EnvoyStorageSettingsRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -47,7 +47,7 @@ class EnvoyStorageSettingsRequiredKeysMixin:
update_fn: Callable[[Envoy, float], Awaitable[dict[str, Any]]] update_fn: Callable[[Envoy, float], Awaitable[dict[str, Any]]]
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsNumberEntityDescription( class EnvoyStorageSettingsNumberEntityDescription(
NumberEntityDescription, EnvoyStorageSettingsRequiredKeysMixin NumberEntityDescription, EnvoyStorageSettingsRequiredKeysMixin
): ):

View File

@ -21,7 +21,7 @@ from .coordinator import EnphaseUpdateCoordinator
from .entity import EnvoyBaseEntity from .entity import EnvoyBaseEntity
@dataclass @dataclass(frozen=True)
class EnvoyRelayRequiredKeysMixin: class EnvoyRelayRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -31,14 +31,14 @@ class EnvoyRelayRequiredKeysMixin:
] ]
@dataclass @dataclass(frozen=True)
class EnvoyRelaySelectEntityDescription( class EnvoyRelaySelectEntityDescription(
SelectEntityDescription, EnvoyRelayRequiredKeysMixin SelectEntityDescription, EnvoyRelayRequiredKeysMixin
): ):
"""Describes an Envoy Dry Contact Relay select entity.""" """Describes an Envoy Dry Contact Relay select entity."""
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsRequiredKeysMixin: class EnvoyStorageSettingsRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -46,7 +46,7 @@ class EnvoyStorageSettingsRequiredKeysMixin:
update_fn: Callable[[Envoy, str], Awaitable[dict[str, Any]]] update_fn: Callable[[Envoy, str], Awaitable[dict[str, Any]]]
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsSelectEntityDescription( class EnvoyStorageSettingsSelectEntityDescription(
SelectEntityDescription, EnvoyStorageSettingsRequiredKeysMixin SelectEntityDescription, EnvoyStorageSettingsRequiredKeysMixin
): ):

View File

@ -47,14 +47,14 @@ INVERTERS_KEY = "inverters"
LAST_REPORTED_KEY = "last_reported" LAST_REPORTED_KEY = "last_reported"
@dataclass @dataclass(frozen=True)
class EnvoyInverterRequiredKeysMixin: class EnvoyInverterRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyInverter], datetime.datetime | float] value_fn: Callable[[EnvoyInverter], datetime.datetime | float]
@dataclass @dataclass(frozen=True)
class EnvoyInverterSensorEntityDescription( class EnvoyInverterSensorEntityDescription(
SensorEntityDescription, EnvoyInverterRequiredKeysMixin SensorEntityDescription, EnvoyInverterRequiredKeysMixin
): ):
@ -80,14 +80,14 @@ INVERTER_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyProductionRequiredKeysMixin: class EnvoyProductionRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoySystemProduction], int] value_fn: Callable[[EnvoySystemProduction], int]
@dataclass @dataclass(frozen=True)
class EnvoyProductionSensorEntityDescription( class EnvoyProductionSensorEntityDescription(
SensorEntityDescription, EnvoyProductionRequiredKeysMixin SensorEntityDescription, EnvoyProductionRequiredKeysMixin
): ):
@ -137,14 +137,14 @@ PRODUCTION_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyConsumptionRequiredKeysMixin: class EnvoyConsumptionRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoySystemConsumption], int] value_fn: Callable[[EnvoySystemConsumption], int]
@dataclass @dataclass(frozen=True)
class EnvoyConsumptionSensorEntityDescription( class EnvoyConsumptionSensorEntityDescription(
SensorEntityDescription, EnvoyConsumptionRequiredKeysMixin SensorEntityDescription, EnvoyConsumptionRequiredKeysMixin
): ):
@ -194,28 +194,28 @@ CONSUMPTION_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeRequiredKeysMixin: class EnvoyEnchargeRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEncharge], datetime.datetime | int | float] value_fn: Callable[[EnvoyEncharge], datetime.datetime | int | float]
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeSensorEntityDescription( class EnvoyEnchargeSensorEntityDescription(
SensorEntityDescription, EnvoyEnchargeRequiredKeysMixin SensorEntityDescription, EnvoyEnchargeRequiredKeysMixin
): ):
"""Describes an Envoy Encharge sensor entity.""" """Describes an Envoy Encharge sensor entity."""
@dataclass @dataclass(frozen=True)
class EnvoyEnchargePowerRequiredKeysMixin: class EnvoyEnchargePowerRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEnchargePower], int | float] value_fn: Callable[[EnvoyEnchargePower], int | float]
@dataclass @dataclass(frozen=True)
class EnvoyEnchargePowerSensorEntityDescription( class EnvoyEnchargePowerSensorEntityDescription(
SensorEntityDescription, EnvoyEnchargePowerRequiredKeysMixin SensorEntityDescription, EnvoyEnchargePowerRequiredKeysMixin
): ):
@ -259,14 +259,14 @@ ENCHARGE_POWER_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerRequiredKeysMixin: class EnvoyEnpowerRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEnpower], datetime.datetime | int | float] value_fn: Callable[[EnvoyEnpower], datetime.datetime | int | float]
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerSensorEntityDescription( class EnvoyEnpowerSensorEntityDescription(
SensorEntityDescription, EnvoyEnpowerRequiredKeysMixin SensorEntityDescription, EnvoyEnpowerRequiredKeysMixin
): ):
@ -289,14 +289,14 @@ ENPOWER_SENSORS = (
) )
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeAggregateRequiredKeysMixin: class EnvoyEnchargeAggregateRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[EnvoyEnchargeAggregate], int] value_fn: Callable[[EnvoyEnchargeAggregate], int]
@dataclass @dataclass(frozen=True)
class EnvoyEnchargeAggregateSensorEntityDescription( class EnvoyEnchargeAggregateSensorEntityDescription(
SensorEntityDescription, EnvoyEnchargeAggregateRequiredKeysMixin SensorEntityDescription, EnvoyEnchargeAggregateRequiredKeysMixin
): ):

View File

@ -24,7 +24,7 @@ from .entity import EnvoyBaseEntity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerRequiredKeysMixin: class EnvoyEnpowerRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -33,14 +33,14 @@ class EnvoyEnpowerRequiredKeysMixin:
turn_off_fn: Callable[[Envoy], Coroutine[Any, Any, dict[str, Any]]] turn_off_fn: Callable[[Envoy], Coroutine[Any, Any, dict[str, Any]]]
@dataclass @dataclass(frozen=True)
class EnvoyEnpowerSwitchEntityDescription( class EnvoyEnpowerSwitchEntityDescription(
SwitchEntityDescription, EnvoyEnpowerRequiredKeysMixin SwitchEntityDescription, EnvoyEnpowerRequiredKeysMixin
): ):
"""Describes an Envoy Enpower switch entity.""" """Describes an Envoy Enpower switch entity."""
@dataclass @dataclass(frozen=True)
class EnvoyDryContactRequiredKeysMixin: class EnvoyDryContactRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -49,14 +49,14 @@ class EnvoyDryContactRequiredKeysMixin:
turn_off_fn: Callable[[Envoy, str], Coroutine[Any, Any, dict[str, Any]]] turn_off_fn: Callable[[Envoy, str], Coroutine[Any, Any, dict[str, Any]]]
@dataclass @dataclass(frozen=True)
class EnvoyDryContactSwitchEntityDescription( class EnvoyDryContactSwitchEntityDescription(
SwitchEntityDescription, EnvoyDryContactRequiredKeysMixin SwitchEntityDescription, EnvoyDryContactRequiredKeysMixin
): ):
"""Describes an Envoy Enpower dry contact switch entity.""" """Describes an Envoy Enpower dry contact switch entity."""
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsRequiredKeysMixin: class EnvoyStorageSettingsRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
@ -65,7 +65,7 @@ class EnvoyStorageSettingsRequiredKeysMixin:
turn_off_fn: Callable[[Envoy], Awaitable[dict[str, Any]]] turn_off_fn: Callable[[Envoy], Awaitable[dict[str, Any]]]
@dataclass @dataclass(frozen=True)
class EnvoyStorageSettingsSwitchEntityDescription( class EnvoyStorageSettingsSwitchEntityDescription(
SwitchEntityDescription, EnvoyStorageSettingsRequiredKeysMixin SwitchEntityDescription, EnvoyStorageSettingsRequiredKeysMixin
): ):

View File

@ -33,14 +33,14 @@ from .const import ATTR_STATION, DOMAIN
ATTR_TIME = "alert time" ATTR_TIME = "alert time"
@dataclass @dataclass(frozen=True)
class ECSensorEntityDescriptionMixin: class ECSensorEntityDescriptionMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
value_fn: Callable[[Any], Any] value_fn: Callable[[Any], Any]
@dataclass @dataclass(frozen=True)
class ECSensorEntityDescription( class ECSensorEntityDescription(
SensorEntityDescription, ECSensorEntityDescriptionMixin SensorEntityDescription, ECSensorEntityDescriptionMixin
): ):

View File

@ -33,14 +33,14 @@ SCAN_INTERVAL = timedelta(seconds=60)
PARALLEL_UPDATES = 0 PARALLEL_UPDATES = 0
@dataclass @dataclass(frozen=True)
class EzvizAlarmControlPanelEntityDescriptionMixin: class EzvizAlarmControlPanelEntityDescriptionMixin:
"""Mixin values for EZVIZ Alarm control panel entities.""" """Mixin values for EZVIZ Alarm control panel entities."""
ezviz_alarm_states: list ezviz_alarm_states: list
@dataclass @dataclass(frozen=True)
class EzvizAlarmControlPanelEntityDescription( class EzvizAlarmControlPanelEntityDescription(
AlarmControlPanelEntityDescription, EzvizAlarmControlPanelEntityDescriptionMixin AlarmControlPanelEntityDescription, EzvizAlarmControlPanelEntityDescriptionMixin
): ):

View File

@ -22,7 +22,7 @@ from .entity import EzvizEntity
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@dataclass @dataclass(frozen=True)
class EzvizButtonEntityDescriptionMixin: class EzvizButtonEntityDescriptionMixin:
"""Mixin values for EZVIZ button entities.""" """Mixin values for EZVIZ button entities."""
@ -30,7 +30,7 @@ class EzvizButtonEntityDescriptionMixin:
supported_ext: str supported_ext: str
@dataclass @dataclass(frozen=True)
class EzvizButtonEntityDescription( class EzvizButtonEntityDescription(
ButtonEntityDescription, EzvizButtonEntityDescriptionMixin ButtonEntityDescription, EzvizButtonEntityDescriptionMixin
): ):

View File

@ -30,7 +30,7 @@ PARALLEL_UPDATES = 0
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class EzvizNumberEntityDescriptionMixin: class EzvizNumberEntityDescriptionMixin:
"""Mixin values for EZVIZ Number entities.""" """Mixin values for EZVIZ Number entities."""
@ -38,7 +38,7 @@ class EzvizNumberEntityDescriptionMixin:
supported_ext_value: list supported_ext_value: list
@dataclass @dataclass(frozen=True)
class EzvizNumberEntityDescription( class EzvizNumberEntityDescription(
NumberEntityDescription, EzvizNumberEntityDescriptionMixin NumberEntityDescription, EzvizNumberEntityDescriptionMixin
): ):

View File

@ -20,14 +20,14 @@ from .entity import EzvizEntity
PARALLEL_UPDATES = 1 PARALLEL_UPDATES = 1
@dataclass @dataclass(frozen=True)
class EzvizSelectEntityDescriptionMixin: class EzvizSelectEntityDescriptionMixin:
"""Mixin values for EZVIZ Select entities.""" """Mixin values for EZVIZ Select entities."""
supported_switch: int supported_switch: int
@dataclass @dataclass(frozen=True)
class EzvizSelectEntityDescription( class EzvizSelectEntityDescription(
SelectEntityDescription, EzvizSelectEntityDescriptionMixin SelectEntityDescription, EzvizSelectEntityDescriptionMixin
): ):

View File

@ -22,14 +22,14 @@ from .coordinator import EzvizDataUpdateCoordinator
from .entity import EzvizEntity from .entity import EzvizEntity
@dataclass @dataclass(frozen=True)
class EzvizSwitchEntityDescriptionMixin: class EzvizSwitchEntityDescriptionMixin:
"""Mixin values for EZVIZ Switch entities.""" """Mixin values for EZVIZ Switch entities."""
supported_ext: str | None supported_ext: str | None
@dataclass @dataclass(frozen=True)
class EzvizSwitchEntityDescription( class EzvizSwitchEntityDescription(
SwitchEntityDescription, EzvizSwitchEntityDescriptionMixin SwitchEntityDescription, EzvizSwitchEntityDescriptionMixin
): ):

View File

@ -21,7 +21,7 @@ from . import FAADataUpdateCoordinator
from .const import DOMAIN from .const import DOMAIN
@dataclass(kw_only=True) @dataclass(frozen=True, kw_only=True)
class FaaDelaysBinarySensorEntityDescription(BinarySensorEntityDescription): class FaaDelaysBinarySensorEntityDescription(BinarySensorEntityDescription):
"""Mixin for required keys.""" """Mixin for required keys."""

View File

@ -146,7 +146,7 @@ def _int_value_or_none(field: str) -> Callable[[dict[str, Any]], int | None]:
return convert return convert
@dataclass @dataclass(frozen=True)
class FitbitSensorEntityDescription(SensorEntityDescription): class FitbitSensorEntityDescription(SensorEntityDescription):
"""Describes Fitbit sensor entity.""" """Describes Fitbit sensor entity."""

View File

@ -14,7 +14,7 @@ from .const import DOMAIN, NAME_STATUS
from .entity import FiveMEntity, FiveMEntityDescription from .entity import FiveMEntity, FiveMEntityDescription
@dataclass @dataclass(frozen=True)
class FiveMBinarySensorEntityDescription( class FiveMBinarySensorEntityDescription(
BinarySensorEntityDescription, FiveMEntityDescription BinarySensorEntityDescription, FiveMEntityDescription
): ):

View File

@ -16,7 +16,7 @@ from .coordinator import FiveMDataUpdateCoordinator
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class FiveMEntityDescription(EntityDescription): class FiveMEntityDescription(EntityDescription):
"""Describes FiveM entity.""" """Describes FiveM entity."""

View File

@ -24,7 +24,7 @@ from .const import (
from .entity import FiveMEntity, FiveMEntityDescription from .entity import FiveMEntity, FiveMEntityDescription
@dataclass @dataclass(frozen=True)
class FiveMSensorEntityDescription(SensorEntityDescription, FiveMEntityDescription): class FiveMSensorEntityDescription(SensorEntityDescription, FiveMEntityDescription):
"""Describes FiveM sensor entity.""" """Describes FiveM sensor entity."""

View File

@ -22,7 +22,7 @@ from . import async_setup_entry_platform
from .coordinator import FjaraskupanCoordinator from .coordinator import FjaraskupanCoordinator
@dataclass @dataclass(frozen=True)
class EntityDescription(BinarySensorEntityDescription): class EntityDescription(BinarySensorEntityDescription):
"""Entity description.""" """Entity description."""

View File

@ -39,14 +39,14 @@ BINARY_SENSOR_DESCRIPTION_CONNECTED = BinarySensorEntityDescription(
) )
@dataclass @dataclass(frozen=True)
class FlumeBinarySensorRequiredKeysMixin: class FlumeBinarySensorRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
event_rule: str event_rule: str
@dataclass @dataclass(frozen=True)
class FlumeBinarySensorEntityDescription( class FlumeBinarySensorEntityDescription(
BinarySensorEntityDescription, FlumeBinarySensorRequiredKeysMixin BinarySensorEntityDescription, FlumeBinarySensorRequiredKeysMixin
): ):

View File

@ -27,7 +27,7 @@ from .const import DOMAIN
from .coordinator import ForecastSolarDataUpdateCoordinator from .coordinator import ForecastSolarDataUpdateCoordinator
@dataclass @dataclass(frozen=True)
class ForecastSolarSensorEntityDescription(SensorEntityDescription): class ForecastSolarSensorEntityDescription(SensorEntityDescription):
"""Describes a Forecast.Solar Sensor.""" """Describes a Forecast.Solar Sensor."""

View File

@ -18,14 +18,14 @@ from .const import DOMAIN
from .router import FreeboxRouter from .router import FreeboxRouter
@dataclass @dataclass(frozen=True)
class FreeboxButtonRequiredKeysMixin: class FreeboxButtonRequiredKeysMixin:
"""Mixin for required keys.""" """Mixin for required keys."""
async_press: Callable[[FreeboxRouter], Awaitable] async_press: Callable[[FreeboxRouter], Awaitable]
@dataclass @dataclass(frozen=True)
class FreeboxButtonEntityDescription( class FreeboxButtonEntityDescription(
ButtonEntityDescription, FreeboxButtonRequiredKeysMixin ButtonEntityDescription, FreeboxButtonRequiredKeysMixin
): ):

View File

@ -26,7 +26,7 @@ from .const import DOMAIN
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class FritzBinarySensorEntityDescription( class FritzBinarySensorEntityDescription(
BinarySensorEntityDescription, FritzEntityDescription BinarySensorEntityDescription, FritzEntityDescription
): ):

View File

@ -23,14 +23,14 @@ from .const import DOMAIN
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@dataclass @dataclass(frozen=True)
class FritzButtonDescriptionMixin: class FritzButtonDescriptionMixin:
"""Mixin to describe a Button entity.""" """Mixin to describe a Button entity."""
press_action: Callable press_action: Callable
@dataclass @dataclass(frozen=True)
class FritzButtonDescription(ButtonEntityDescription, FritzButtonDescriptionMixin): class FritzButtonDescription(ButtonEntityDescription, FritzButtonDescriptionMixin):
"""Class to describe a Button entity.""" """Class to describe a Button entity."""

Some files were not shown because too many files have changed in this diff Show More