From b2c1cd3e2aa8c8c14a7630db193cd22abec90861 Mon Sep 17 00:00:00 2001 From: G Johansson Date: Wed, 1 May 2024 21:59:07 +0200 Subject: [PATCH] Use config entry runtime data in Trafikverket Camera (#116552) --- .../components/trafikverket_camera/__init__.py | 14 ++++++-------- .../trafikverket_camera/binary_sensor.py | 11 ++++++----- .../components/trafikverket_camera/camera.py | 8 ++++---- .../components/trafikverket_camera/coordinator.py | 15 +++++++++++---- .../components/trafikverket_camera/sensor.py | 11 ++++++----- 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/homeassistant/components/trafikverket_camera/__init__.py b/homeassistant/components/trafikverket_camera/__init__.py index 998b667add3..3186e803087 100644 --- a/homeassistant/components/trafikverket_camera/__init__.py +++ b/homeassistant/components/trafikverket_camera/__init__.py @@ -19,13 +19,15 @@ CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) _LOGGER = logging.getLogger(__name__) +TVCameraConfigEntry = ConfigEntry[TVDataUpdateCoordinator] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: + +async def async_setup_entry(hass: HomeAssistant, entry: TVCameraConfigEntry) -> bool: """Set up Trafikverket Camera from a config entry.""" - coordinator = TVDataUpdateCoordinator(hass, entry) + coordinator = TVDataUpdateCoordinator(hass) 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) @@ -34,11 +36,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Unload Trafikverket Camera config entry.""" - - if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS): - hass.data[DOMAIN].pop(entry.entry_id) - - return unload_ok + return await hass.config_entries.async_unload_platforms(entry, PLATFORMS) async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: diff --git a/homeassistant/components/trafikverket_camera/binary_sensor.py b/homeassistant/components/trafikverket_camera/binary_sensor.py index 56af099d54b..b367fa0fb45 100644 --- a/homeassistant/components/trafikverket_camera/binary_sensor.py +++ b/homeassistant/components/trafikverket_camera/binary_sensor.py @@ -9,12 +9,11 @@ from homeassistant.components.binary_sensor import ( BinarySensorEntity, BinarySensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import DOMAIN -from .coordinator import CameraData, TVDataUpdateCoordinator +from . import TVCameraConfigEntry +from .coordinator import CameraData from .entity import TrafikverketCameraNonCameraEntity PARALLEL_UPDATES = 0 @@ -35,11 +34,13 @@ BINARY_SENSOR_TYPE = TVCameraSensorEntityDescription( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: TVCameraConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Trafikverket Camera binary sensor platform.""" - coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data async_add_entities( [ TrafikverketCameraBinarySensor( diff --git a/homeassistant/components/trafikverket_camera/camera.py b/homeassistant/components/trafikverket_camera/camera.py index 0fa70a886b2..1ae48732c88 100644 --- a/homeassistant/components/trafikverket_camera/camera.py +++ b/homeassistant/components/trafikverket_camera/camera.py @@ -6,24 +6,24 @@ from collections.abc import Mapping from typing import Any from homeassistant.components.camera import Camera -from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_LOCATION from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback -from .const import ATTR_DESCRIPTION, ATTR_TYPE, DOMAIN +from . import TVCameraConfigEntry +from .const import ATTR_DESCRIPTION, ATTR_TYPE from .coordinator import TVDataUpdateCoordinator from .entity import TrafikverketCameraEntity async def async_setup_entry( hass: HomeAssistant, - entry: ConfigEntry, + entry: TVCameraConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up a Trafikverket Camera.""" - coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data async_add_entities( [ diff --git a/homeassistant/components/trafikverket_camera/coordinator.py b/homeassistant/components/trafikverket_camera/coordinator.py index 03b70009189..cceea9afc5c 100644 --- a/homeassistant/components/trafikverket_camera/coordinator.py +++ b/homeassistant/components/trafikverket_camera/coordinator.py @@ -6,6 +6,7 @@ from dataclasses import dataclass from datetime import timedelta from io import BytesIO import logging +from typing import TYPE_CHECKING from pytrafikverket.exceptions import ( InvalidAuthentication, @@ -15,7 +16,6 @@ from pytrafikverket.exceptions import ( ) from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_API_KEY, CONF_ID from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryAuthFailed @@ -24,6 +24,9 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda from .const import DOMAIN +if TYPE_CHECKING: + from . import TVCameraConfigEntry + _LOGGER = logging.getLogger(__name__) TIME_BETWEEN_UPDATES = timedelta(minutes=5) @@ -39,7 +42,9 @@ class CameraData: class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]): """A Trafikverket Data Update Coordinator.""" - def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: + config_entry: TVCameraConfigEntry + + def __init__(self, hass: HomeAssistant) -> None: """Initialize the Trafikverket coordinator.""" super().__init__( hass, @@ -48,8 +53,10 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]): update_interval=TIME_BETWEEN_UPDATES, ) self.session = async_get_clientsession(hass) - self._camera_api = TrafikverketCamera(self.session, entry.data[CONF_API_KEY]) - self._id = entry.data[CONF_ID] + self._camera_api = TrafikverketCamera( + self.session, self.config_entry.data[CONF_API_KEY] + ) + self._id = self.config_entry.data[CONF_ID] async def _async_update_data(self) -> CameraData: """Fetch data from Trafikverket.""" diff --git a/homeassistant/components/trafikverket_camera/sensor.py b/homeassistant/components/trafikverket_camera/sensor.py index f41eb1fa2a2..cb5c458f742 100644 --- a/homeassistant/components/trafikverket_camera/sensor.py +++ b/homeassistant/components/trafikverket_camera/sensor.py @@ -11,14 +11,13 @@ from homeassistant.components.sensor import ( SensorEntity, SensorEntityDescription, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import DEGREE from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType -from .const import DOMAIN -from .coordinator import CameraData, TVDataUpdateCoordinator +from . import TVCameraConfigEntry +from .coordinator import CameraData from .entity import TrafikverketCameraNonCameraEntity PARALLEL_UPDATES = 0 @@ -73,11 +72,13 @@ SENSOR_TYPES: tuple[TVCameraSensorEntityDescription, ...] = ( async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback + hass: HomeAssistant, + entry: TVCameraConfigEntry, + async_add_entities: AddEntitiesCallback, ) -> None: """Set up Trafikverket Camera sensor platform.""" - coordinator: TVDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator = entry.runtime_data async_add_entities( TrafikverketCameraSensor(coordinator, entry.entry_id, description) for description in SENSOR_TYPES