Use runtime_data in evil_genius_labs (#136704)

pull/131848/head
epenet 2025-01-28 11:50:11 +01:00 committed by GitHub
parent f1305cd5a3
commit 7fc5a2294d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 24 additions and 26 deletions

View File

@ -4,38 +4,32 @@ from __future__ import annotations
import pyevilgenius import pyevilgenius
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import Platform from homeassistant.const import Platform
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
from .const import DOMAIN from .coordinator import EvilGeniusConfigEntry, EvilGeniusUpdateCoordinator
from .coordinator import EvilGeniusUpdateCoordinator
PLATFORMS = [Platform.LIGHT] PLATFORMS = [Platform.LIGHT]
UPDATE_INTERVAL = 10 UPDATE_INTERVAL = 10
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: EvilGeniusConfigEntry) -> bool:
"""Set up Evil Genius Labs from a config entry.""" """Set up Evil Genius Labs from a config entry."""
coordinator = EvilGeniusUpdateCoordinator( coordinator = EvilGeniusUpdateCoordinator(
hass, hass,
entry.title, entry,
pyevilgenius.EvilGeniusDevice( pyevilgenius.EvilGeniusDevice(
entry.data["host"], aiohttp_client.async_get_clientsession(hass) entry.data["host"], aiohttp_client.async_get_clientsession(hass)
), ),
) )
await coordinator.async_config_entry_first_refresh() await coordinator.async_config_entry_first_refresh()
hass.data.setdefault(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)
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: EvilGeniusConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok

View File

@ -10,11 +10,16 @@ from typing import cast
from aiohttp import ContentTypeError from aiohttp import ContentTypeError
import pyevilgenius import pyevilgenius
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
UPDATE_INTERVAL = 10 UPDATE_INTERVAL = 10
_LOGGER = logging.getLogger(__name__)
type EvilGeniusConfigEntry = ConfigEntry[EvilGeniusUpdateCoordinator]
class EvilGeniusUpdateCoordinator(DataUpdateCoordinator[dict]): class EvilGeniusUpdateCoordinator(DataUpdateCoordinator[dict]):
"""Update coordinator for Evil Genius data.""" """Update coordinator for Evil Genius data."""
@ -24,14 +29,18 @@ class EvilGeniusUpdateCoordinator(DataUpdateCoordinator[dict]):
product: dict | None product: dict | None
def __init__( def __init__(
self, hass: HomeAssistant, name: str, client: pyevilgenius.EvilGeniusDevice self,
hass: HomeAssistant,
entry: EvilGeniusConfigEntry,
client: pyevilgenius.EvilGeniusDevice,
) -> None: ) -> None:
"""Initialize the data update coordinator.""" """Initialize the data update coordinator."""
self.client = client self.client = client
super().__init__( super().__init__(
hass, hass,
logging.getLogger(__name__), _LOGGER,
name=name, config_entry=entry,
name=entry.title,
update_interval=timedelta(seconds=UPDATE_INTERVAL), update_interval=timedelta(seconds=UPDATE_INTERVAL),
) )

View File

@ -5,20 +5,18 @@ from __future__ import annotations
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 EvilGeniusConfigEntry
from .coordinator import EvilGeniusUpdateCoordinator
TO_REDACT = {"wiFiSsidDefault", "wiFiSSID"} TO_REDACT = {"wiFiSsidDefault", "wiFiSSID"}
async def async_get_config_entry_diagnostics( async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry hass: HomeAssistant, config_entry: EvilGeniusConfigEntry
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Return diagnostics for a config entry.""" """Return diagnostics for a config entry."""
coordinator: EvilGeniusUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] coordinator = config_entry.runtime_data
return { return {
"info": async_redact_data(coordinator.info, TO_REDACT), "info": async_redact_data(coordinator.info, TO_REDACT),

View File

@ -7,12 +7,10 @@ from typing import Any, cast
from homeassistant.components import light from homeassistant.components import light
from homeassistant.components.light import ColorMode, LightEntity, LightEntityFeature from homeassistant.components.light import ColorMode, LightEntity, LightEntityFeature
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .coordinator import EvilGeniusConfigEntry, EvilGeniusUpdateCoordinator
from .coordinator import EvilGeniusUpdateCoordinator
from .entity import EvilGeniusEntity from .entity import EvilGeniusEntity
from .util import update_when_done from .util import update_when_done
@ -22,12 +20,11 @@ FIB_NO_EFFECT = "Solid Color"
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
config_entry: ConfigEntry, config_entry: EvilGeniusConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the Evil Genius light platform.""" """Set up the Evil Genius light platform."""
coordinator: EvilGeniusUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] async_add_entities([EvilGeniusLight(config_entry.runtime_data)])
async_add_entities([EvilGeniusLight(coordinator)])
class EvilGeniusLight(EvilGeniusEntity, LightEntity): class EvilGeniusLight(EvilGeniusEntity, LightEntity):