Use runtime data instead of hass.data in jvc projector (#124608)

* feat: use runtime data instead of hass.data

* fix: extend ConfigEntry
This commit is contained in:
ilan 2024-08-26 13:26:53 -04:00 committed by GitHub
parent a68cd712c6
commit 547dbf77aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 20 additions and 30 deletions

View File

@ -15,13 +15,14 @@ from homeassistant.const import (
from homeassistant.core import Event, HomeAssistant from homeassistant.core import Event, HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from .const import DOMAIN
from .coordinator import JvcProjectorDataUpdateCoordinator from .coordinator import JvcProjectorDataUpdateCoordinator
type JVCConfigEntry = ConfigEntry[JvcProjectorDataUpdateCoordinator]
PLATFORMS = [Platform.BINARY_SENSOR, Platform.REMOTE, Platform.SELECT, Platform.SENSOR] PLATFORMS = [Platform.BINARY_SENSOR, Platform.REMOTE, Platform.SELECT, Platform.SENSOR]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(hass: HomeAssistant, entry: JVCConfigEntry) -> bool:
"""Set up integration from a config entry.""" """Set up integration from a config entry."""
device = JvcProjector( device = JvcProjector(
host=entry.data[CONF_HOST], host=entry.data[CONF_HOST],
@ -43,7 +44,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
coordinator = JvcProjectorDataUpdateCoordinator(hass, device) coordinator = JvcProjectorDataUpdateCoordinator(hass, device)
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
async def disconnect(event: Event) -> None: async def disconnect(event: Event) -> None:
await device.disconnect() await device.disconnect()
@ -57,9 +58,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: JVCConfigEntry) -> bool:
"""Unload config entry.""" """Unload 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):
await hass.data[DOMAIN][entry.entry_id].device.disconnect() await entry.runtime_data.device.disconnect()
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok return unload_ok

View File

@ -5,22 +5,20 @@ from __future__ import annotations
from jvcprojector import const from jvcprojector import const
from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.components.binary_sensor import BinarySensorEntity
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 . import JvcProjectorDataUpdateCoordinator from . import JVCConfigEntry, JvcProjectorDataUpdateCoordinator
from .const import DOMAIN
from .entity import JvcProjectorEntity from .entity import JvcProjectorEntity
ON_STATUS = (const.ON, const.WARMING) ON_STATUS = (const.ON, const.WARMING)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: JVCConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up the JVC Projector platform from a config entry.""" """Set up the JVC Projector platform from a config entry."""
coordinator: JvcProjectorDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] coordinator = entry.runtime_data
async_add_entities([JvcBinarySensor(coordinator)]) async_add_entities([JvcBinarySensor(coordinator)])

View File

@ -10,12 +10,11 @@ from typing import Any
from jvcprojector import const from jvcprojector import const
from homeassistant.components.remote import RemoteEntity from homeassistant.components.remote import RemoteEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from . import JVCConfigEntry
from .entity import JvcProjectorEntity from .entity import JvcProjectorEntity
COMMANDS = { COMMANDS = {
@ -55,10 +54,10 @@ _LOGGER = logging.getLogger(__name__)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: JVCConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up the JVC Projector platform from a config entry.""" """Set up the JVC Projector platform from a config entry."""
coordinator = hass.data[DOMAIN][entry.entry_id] coordinator = entry.runtime_data
async_add_entities([JvcProjectorRemote(coordinator)], True) async_add_entities([JvcProjectorRemote(coordinator)], True)

View File

@ -9,12 +9,10 @@ from typing import Final
from jvcprojector import JvcProjector, const from jvcprojector import JvcProjector, const
from homeassistant.components.select import SelectEntity, SelectEntityDescription from homeassistant.components.select import SelectEntity, SelectEntityDescription
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 . import JvcProjectorDataUpdateCoordinator from . import JVCConfigEntry, JvcProjectorDataUpdateCoordinator
from .const import DOMAIN
from .entity import JvcProjectorEntity from .entity import JvcProjectorEntity
@ -41,11 +39,11 @@ SELECTS: Final[list[JvcProjectorSelectDescription]] = [
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
entry: ConfigEntry, entry: JVCConfigEntry,
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Set up the JVC Projector platform from a config entry.""" """Set up the JVC Projector platform from a config entry."""
coordinator: JvcProjectorDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] coordinator = entry.runtime_data
async_add_entities( async_add_entities(
JvcProjectorSelectEntity(coordinator, description) for description in SELECTS JvcProjectorSelectEntity(coordinator, description) for description in SELECTS

View File

@ -9,13 +9,11 @@ from homeassistant.components.sensor import (
SensorEntity, SensorEntity,
SensorEntityDescription, SensorEntityDescription,
) )
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 AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import JvcProjectorDataUpdateCoordinator from . import JVCConfigEntry, JvcProjectorDataUpdateCoordinator
from .const import DOMAIN
from .entity import JvcProjectorEntity from .entity import JvcProjectorEntity
JVC_SENSORS = ( JVC_SENSORS = (
@ -36,10 +34,10 @@ JVC_SENSORS = (
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback hass: HomeAssistant, entry: JVCConfigEntry, async_add_entities: AddEntitiesCallback
) -> None: ) -> None:
"""Set up the JVC Projector platform from a config entry.""" """Set up the JVC Projector platform from a config entry."""
coordinator: JvcProjectorDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] coordinator = entry.runtime_data
async_add_entities( async_add_entities(
JvcSensor(coordinator, description) for description in JVC_SENSORS JvcSensor(coordinator, description) for description in JVC_SENSORS

View File

@ -5,7 +5,6 @@ from unittest.mock import AsyncMock
from jvcprojector import JvcProjectorAuthError, JvcProjectorConnectError from jvcprojector import JvcProjectorAuthError, JvcProjectorConnectError
from homeassistant.components.jvc_projector import DOMAIN
from homeassistant.components.jvc_projector.coordinator import ( from homeassistant.components.jvc_projector.coordinator import (
INTERVAL_FAST, INTERVAL_FAST,
INTERVAL_SLOW, INTERVAL_SLOW,
@ -29,7 +28,7 @@ async def test_coordinator_update(
) )
await hass.async_block_till_done() await hass.async_block_till_done()
assert mock_device.get_state.call_count == 3 assert mock_device.get_state.call_count == 3
coordinator = hass.data[DOMAIN][mock_integration.entry_id] coordinator = mock_integration.runtime_data
assert coordinator.update_interval == INTERVAL_SLOW assert coordinator.update_interval == INTERVAL_SLOW
@ -69,5 +68,5 @@ async def test_coordinator_device_on(
mock_config_entry.add_to_hass(hass) mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done() await hass.async_block_till_done()
coordinator = hass.data[DOMAIN][mock_config_entry.entry_id] coordinator = mock_config_entry.runtime_data
assert coordinator.update_interval == INTERVAL_FAST assert coordinator.update_interval == INTERVAL_FAST

View File

@ -38,8 +38,6 @@ async def test_unload_config_entry(
await hass.config_entries.async_unload(mock_config_entry.entry_id) await hass.config_entries.async_unload(mock_config_entry.entry_id)
await hass.async_block_till_done() await hass.async_block_till_done()
assert mock_config_entry.entry_id not in hass.data[DOMAIN]
async def test_config_entry_connect_error( async def test_config_entry_connect_error(
hass: HomeAssistant, hass: HomeAssistant,