mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Migrate lametric to use runtime_data (#147328)
* Migrate lametric to use runtime_data * One more * Drop unused hass_config
This commit is contained in:
parent
1119716c32
commit
3b4eb7c749
@ -1,14 +1,13 @@
|
|||||||
"""Support for LaMetric time."""
|
"""Support for LaMetric time."""
|
||||||
|
|
||||||
from homeassistant.components import notify as hass_notify
|
from homeassistant.components import notify as hass_notify
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import CONF_NAME, Platform
|
from homeassistant.const import CONF_NAME, Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import config_validation as cv, discovery
|
from homeassistant.helpers import config_validation as cv, discovery
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from .const import DOMAIN, PLATFORMS
|
from .const import DOMAIN, PLATFORMS
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .services import async_setup_services
|
from .services import async_setup_services
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
||||||
@ -17,16 +16,16 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
|||||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
"""Set up the LaMetric integration."""
|
"""Set up the LaMetric integration."""
|
||||||
async_setup_services(hass)
|
async_setup_services(hass)
|
||||||
hass.data[DOMAIN] = {"hass_config": config}
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: LaMetricConfigEntry) -> bool:
|
||||||
"""Set up LaMetric from a config entry."""
|
"""Set up LaMetric from a config entry."""
|
||||||
coordinator = LaMetricDataUpdateCoordinator(hass, entry)
|
coordinator = LaMetricDataUpdateCoordinator(hass, entry)
|
||||||
await coordinator.async_config_entry_first_refresh()
|
await coordinator.async_config_entry_first_refresh()
|
||||||
|
|
||||||
hass.data[DOMAIN][entry.entry_id] = coordinator
|
entry.runtime_data = coordinator
|
||||||
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||||
|
|
||||||
# Set up notify platform, no entry support for notify component yet,
|
# Set up notify platform, no entry support for notify component yet,
|
||||||
@ -37,15 +36,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
Platform.NOTIFY,
|
Platform.NOTIFY,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
{CONF_NAME: coordinator.data.name, "entry_id": entry.entry_id},
|
{CONF_NAME: coordinator.data.name, "entry_id": entry.entry_id},
|
||||||
hass.data[DOMAIN]["hass_config"],
|
{},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
async def async_unload_entry(hass: HomeAssistant, entry: LaMetricConfigEntry) -> bool:
|
||||||
"""Unload LaMetric config entry."""
|
"""Unload LaMetric config entry."""
|
||||||
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||||
del hass.data[DOMAIN][entry.entry_id]
|
|
||||||
await hass_notify.async_reload(hass, DOMAIN)
|
await hass_notify.async_reload(hass, DOMAIN)
|
||||||
return unload_ok
|
return unload_ok
|
||||||
|
@ -9,13 +9,11 @@ from typing import Any
|
|||||||
from demetriek import LaMetricDevice
|
from demetriek import LaMetricDevice
|
||||||
|
|
||||||
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
from .helpers import lametric_exception_handler
|
from .helpers import lametric_exception_handler
|
||||||
|
|
||||||
@ -57,11 +55,11 @@ BUTTONS = [
|
|||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: LaMetricConfigEntry,
|
||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up LaMetric button based on a config entry."""
|
"""Set up LaMetric button based on a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
LaMetricButtonEntity(
|
LaMetricButtonEntity(
|
||||||
coordinator=coordinator,
|
coordinator=coordinator,
|
||||||
|
@ -13,13 +13,15 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
|
|||||||
|
|
||||||
from .const import DOMAIN, LOGGER, SCAN_INTERVAL
|
from .const import DOMAIN, LOGGER, SCAN_INTERVAL
|
||||||
|
|
||||||
|
type LaMetricConfigEntry = ConfigEntry[LaMetricDataUpdateCoordinator]
|
||||||
|
|
||||||
|
|
||||||
class LaMetricDataUpdateCoordinator(DataUpdateCoordinator[Device]):
|
class LaMetricDataUpdateCoordinator(DataUpdateCoordinator[Device]):
|
||||||
"""The LaMetric Data Update Coordinator."""
|
"""The LaMetric Data Update Coordinator."""
|
||||||
|
|
||||||
config_entry: ConfigEntry
|
config_entry: LaMetricConfigEntry
|
||||||
|
|
||||||
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:
|
def __init__(self, hass: HomeAssistant, entry: LaMetricConfigEntry) -> None:
|
||||||
"""Initialize the LaMatric coordinator."""
|
"""Initialize the LaMatric coordinator."""
|
||||||
self.lametric = LaMetricDevice(
|
self.lametric = LaMetricDevice(
|
||||||
host=entry.data[CONF_HOST],
|
host=entry.data[CONF_HOST],
|
||||||
|
@ -6,11 +6,9 @@ import json
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.components.diagnostics import async_redact_data
|
from homeassistant.components.diagnostics import async_redact_data
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
|
|
||||||
TO_REDACT = {
|
TO_REDACT = {
|
||||||
"device_id",
|
"device_id",
|
||||||
@ -21,10 +19,10 @@ TO_REDACT = {
|
|||||||
|
|
||||||
|
|
||||||
async def async_get_config_entry_diagnostics(
|
async def async_get_config_entry_diagnostics(
|
||||||
hass: HomeAssistant, entry: ConfigEntry
|
hass: HomeAssistant, entry: LaMetricConfigEntry
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
# Round-trip via JSON to trigger serialization
|
# Round-trip via JSON to trigger serialization
|
||||||
data = json.loads(coordinator.data.to_json())
|
data = json.loads(coordinator.data.to_json())
|
||||||
return async_redact_data(data, TO_REDACT)
|
return async_redact_data(data, TO_REDACT)
|
||||||
|
@ -12,7 +12,7 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
from homeassistant.helpers import device_registry as dr
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
|
|
||||||
|
|
||||||
@ -57,15 +57,9 @@ def async_get_coordinator_by_device_id(
|
|||||||
if (device_entry := device_registry.async_get(device_id)) is None:
|
if (device_entry := device_registry.async_get(device_id)) is None:
|
||||||
raise ValueError(f"Unknown LaMetric device ID: {device_id}")
|
raise ValueError(f"Unknown LaMetric device ID: {device_id}")
|
||||||
|
|
||||||
for entry_id in device_entry.config_entries:
|
entry: LaMetricConfigEntry
|
||||||
if (
|
for entry in hass.config_entries.async_loaded_entries(DOMAIN):
|
||||||
(entry := hass.config_entries.async_get_entry(entry_id))
|
if entry.entry_id in device_entry.config_entries:
|
||||||
and entry.domain == DOMAIN
|
return entry.runtime_data
|
||||||
and entry.entry_id in hass.data[DOMAIN]
|
|
||||||
):
|
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][
|
|
||||||
entry.entry_id
|
|
||||||
]
|
|
||||||
return coordinator
|
|
||||||
|
|
||||||
raise ValueError(f"No coordinator for device ID: {device_id}")
|
raise ValueError(f"No coordinator for device ID: {device_id}")
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
from demetriek import (
|
from demetriek import (
|
||||||
AlarmSound,
|
AlarmSound,
|
||||||
@ -24,8 +24,8 @@ from homeassistant.exceptions import HomeAssistantError, ServiceValidationError
|
|||||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
from homeassistant.util.enum import try_parse_enum
|
from homeassistant.util.enum import try_parse_enum
|
||||||
|
|
||||||
from .const import CONF_CYCLES, CONF_ICON_TYPE, CONF_PRIORITY, CONF_SOUND, DOMAIN
|
from .const import CONF_CYCLES, CONF_ICON_TYPE, CONF_PRIORITY, CONF_SOUND
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
from .coordinator import LaMetricConfigEntry
|
||||||
|
|
||||||
|
|
||||||
async def async_get_service(
|
async def async_get_service(
|
||||||
@ -36,10 +36,12 @@ async def async_get_service(
|
|||||||
"""Get the LaMetric notification service."""
|
"""Get the LaMetric notification service."""
|
||||||
if discovery_info is None:
|
if discovery_info is None:
|
||||||
return None
|
return None
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][
|
entry: LaMetricConfigEntry | None = hass.config_entries.async_get_entry(
|
||||||
discovery_info["entry_id"]
|
discovery_info["entry_id"]
|
||||||
]
|
)
|
||||||
return LaMetricNotificationService(coordinator.lametric)
|
if TYPE_CHECKING:
|
||||||
|
assert entry is not None
|
||||||
|
return LaMetricNotificationService(entry.runtime_data.lametric)
|
||||||
|
|
||||||
|
|
||||||
class LaMetricNotificationService(BaseNotificationService):
|
class LaMetricNotificationService(BaseNotificationService):
|
||||||
|
@ -9,13 +9,11 @@ from typing import Any
|
|||||||
from demetriek import Device, LaMetricDevice, Range
|
from demetriek import Device, LaMetricDevice, Range
|
||||||
|
|
||||||
from homeassistant.components.number import NumberEntity, NumberEntityDescription
|
from homeassistant.components.number import NumberEntity, NumberEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import PERCENTAGE, EntityCategory
|
from homeassistant.const import PERCENTAGE, EntityCategory
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
from .helpers import lametric_exception_handler
|
from .helpers import lametric_exception_handler
|
||||||
|
|
||||||
@ -57,11 +55,11 @@ NUMBERS = [
|
|||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: LaMetricConfigEntry,
|
||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up LaMetric number based on a config entry."""
|
"""Set up LaMetric number based on a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
LaMetricNumberEntity(
|
LaMetricNumberEntity(
|
||||||
coordinator=coordinator,
|
coordinator=coordinator,
|
||||||
|
@ -17,7 +17,7 @@ rules:
|
|||||||
Entities of this integration does not explicitly subscribe to events.
|
Entities of this integration does not explicitly subscribe to events.
|
||||||
entity-unique-id: done
|
entity-unique-id: done
|
||||||
has-entity-name: done
|
has-entity-name: done
|
||||||
runtime-data: todo
|
runtime-data: done
|
||||||
test-before-configure: done
|
test-before-configure: done
|
||||||
test-before-setup: done
|
test-before-setup: done
|
||||||
unique-config-entry: done
|
unique-config-entry: done
|
||||||
@ -33,6 +33,7 @@ rules:
|
|||||||
parallel-updates: todo
|
parallel-updates: todo
|
||||||
reauthentication-flow: done
|
reauthentication-flow: done
|
||||||
test-coverage: done
|
test-coverage: done
|
||||||
|
|
||||||
# Gold
|
# Gold
|
||||||
devices: done
|
devices: done
|
||||||
diagnostics: done
|
diagnostics: done
|
||||||
|
@ -9,13 +9,11 @@ from typing import Any
|
|||||||
from demetriek import BrightnessMode, Device, LaMetricDevice
|
from demetriek import BrightnessMode, Device, LaMetricDevice
|
||||||
|
|
||||||
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
from homeassistant.components.select import SelectEntity, SelectEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
from .helpers import lametric_exception_handler
|
from .helpers import lametric_exception_handler
|
||||||
|
|
||||||
@ -42,11 +40,11 @@ SELECTS = [
|
|||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: LaMetricConfigEntry,
|
||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up LaMetric select based on a config entry."""
|
"""Set up LaMetric select based on a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
LaMetricSelectEntity(
|
LaMetricSelectEntity(
|
||||||
coordinator=coordinator,
|
coordinator=coordinator,
|
||||||
|
@ -12,13 +12,11 @@ from homeassistant.components.sensor import (
|
|||||||
SensorEntityDescription,
|
SensorEntityDescription,
|
||||||
SensorStateClass,
|
SensorStateClass,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import PERCENTAGE, EntityCategory
|
from homeassistant.const import PERCENTAGE, EntityCategory
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
|
|
||||||
|
|
||||||
@ -44,11 +42,11 @@ SENSORS = [
|
|||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: LaMetricConfigEntry,
|
||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up LaMetric sensor based on a config entry."""
|
"""Set up LaMetric sensor based on a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
LaMetricSensorEntity(
|
LaMetricSensorEntity(
|
||||||
coordinator=coordinator,
|
coordinator=coordinator,
|
||||||
|
@ -9,13 +9,11 @@ from typing import Any
|
|||||||
from demetriek import Device, LaMetricDevice
|
from demetriek import Device, LaMetricDevice
|
||||||
|
|
||||||
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
|
from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import EntityCategory
|
from homeassistant.const import EntityCategory
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .coordinator import LaMetricConfigEntry, LaMetricDataUpdateCoordinator
|
||||||
from .coordinator import LaMetricDataUpdateCoordinator
|
|
||||||
from .entity import LaMetricEntity
|
from .entity import LaMetricEntity
|
||||||
from .helpers import lametric_exception_handler
|
from .helpers import lametric_exception_handler
|
||||||
|
|
||||||
@ -47,11 +45,11 @@ SWITCHES = [
|
|||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entry: ConfigEntry,
|
entry: LaMetricConfigEntry,
|
||||||
async_add_entities: AddConfigEntryEntitiesCallback,
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Set up LaMetric switch based on a config entry."""
|
"""Set up LaMetric switch based on a config entry."""
|
||||||
coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
|
coordinator = entry.runtime_data
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
LaMetricSwitchEntity(
|
LaMetricSwitchEntity(
|
||||||
coordinator=coordinator,
|
coordinator=coordinator,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user