From 6d069bec19fa3105abcd99b2bf88ca840aec9a17 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:57:54 +0200 Subject: [PATCH] Move iqvia base entity to separate module (#126489) --- homeassistant/components/iqvia/__init__.py | 56 +------------------ homeassistant/components/iqvia/entity.py | 62 ++++++++++++++++++++++ homeassistant/components/iqvia/sensor.py | 2 +- 3 files changed, 65 insertions(+), 55 deletions(-) create mode 100644 homeassistant/components/iqvia/entity.py diff --git a/homeassistant/components/iqvia/__init__.py b/homeassistant/components/iqvia/__init__.py index ab05ae19d86..8b72d6f8784 100644 --- a/homeassistant/components/iqvia/__init__.py +++ b/homeassistant/components/iqvia/__init__.py @@ -13,15 +13,10 @@ from pyiqvia.errors import IQVIAError from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform -from homeassistant.core import HomeAssistant, callback +from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers import aiohttp_client -from homeassistant.helpers.entity import EntityDescription -from homeassistant.helpers.update_coordinator import ( - CoordinatorEntity, - DataUpdateCoordinator, - UpdateFailed, -) +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from .const import ( CONF_ZIP_CODE, @@ -112,50 +107,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: hass.data[DOMAIN].pop(entry.entry_id) return unload_ok - - -class IQVIAEntity(CoordinatorEntity[DataUpdateCoordinator[dict[str, Any]]]): - """Define a base IQVIA entity.""" - - _attr_has_entity_name = True - - def __init__( - self, - coordinator: DataUpdateCoordinator[dict[str, Any]], - entry: ConfigEntry, - description: EntityDescription, - ) -> None: - """Initialize.""" - super().__init__(coordinator) - - self._attr_extra_state_attributes = {} - self._attr_unique_id = f"{entry.data[CONF_ZIP_CODE]}_{description.key}" - self._entry = entry - self.entity_description = description - - @callback - def _handle_coordinator_update(self) -> None: - """Handle updated data from the coordinator.""" - if not self.coordinator.last_update_success: - return - - self.update_from_latest_data() - self.async_write_ha_state() - - async def async_added_to_hass(self) -> None: - """Register callbacks.""" - await super().async_added_to_hass() - - if self.entity_description.key == TYPE_ALLERGY_FORECAST: - self.async_on_remove( - self.hass.data[DOMAIN][self._entry.entry_id][ - TYPE_ALLERGY_OUTLOOK - ].async_add_listener(self._handle_coordinator_update) - ) - - self.update_from_latest_data() - - @callback - def update_from_latest_data(self) -> None: - """Update the entity from the latest data.""" - raise NotImplementedError diff --git a/homeassistant/components/iqvia/entity.py b/homeassistant/components/iqvia/entity.py new file mode 100644 index 00000000000..e77c0f7e32a --- /dev/null +++ b/homeassistant/components/iqvia/entity.py @@ -0,0 +1,62 @@ +"""Support for IQVIA.""" + +from __future__ import annotations + +from typing import Any + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import callback +from homeassistant.helpers.entity import EntityDescription +from homeassistant.helpers.update_coordinator import ( + CoordinatorEntity, + DataUpdateCoordinator, +) + +from .const import CONF_ZIP_CODE, DOMAIN, TYPE_ALLERGY_FORECAST, TYPE_ALLERGY_OUTLOOK + + +class IQVIAEntity(CoordinatorEntity[DataUpdateCoordinator[dict[str, Any]]]): + """Define a base IQVIA entity.""" + + _attr_has_entity_name = True + + def __init__( + self, + coordinator: DataUpdateCoordinator[dict[str, Any]], + entry: ConfigEntry, + description: EntityDescription, + ) -> None: + """Initialize.""" + super().__init__(coordinator) + + self._attr_extra_state_attributes = {} + self._attr_unique_id = f"{entry.data[CONF_ZIP_CODE]}_{description.key}" + self._entry = entry + self.entity_description = description + + @callback + def _handle_coordinator_update(self) -> None: + """Handle updated data from the coordinator.""" + if not self.coordinator.last_update_success: + return + + self.update_from_latest_data() + self.async_write_ha_state() + + async def async_added_to_hass(self) -> None: + """Register callbacks.""" + await super().async_added_to_hass() + + if self.entity_description.key == TYPE_ALLERGY_FORECAST: + self.async_on_remove( + self.hass.data[DOMAIN][self._entry.entry_id][ + TYPE_ALLERGY_OUTLOOK + ].async_add_listener(self._handle_coordinator_update) + ) + + self.update_from_latest_data() + + @callback + def update_from_latest_data(self) -> None: + """Update the entity from the latest data.""" + raise NotImplementedError diff --git a/homeassistant/components/iqvia/sensor.py b/homeassistant/components/iqvia/sensor.py index af351e0d543..d04e0885454 100644 --- a/homeassistant/components/iqvia/sensor.py +++ b/homeassistant/components/iqvia/sensor.py @@ -17,7 +17,6 @@ from homeassistant.const import ATTR_STATE from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.entity_platform import AddEntitiesCallback -from . import IQVIAEntity from .const import ( DOMAIN, TYPE_ALLERGY_FORECAST, @@ -33,6 +32,7 @@ from .const import ( TYPE_DISEASE_INDEX, TYPE_DISEASE_TODAY, ) +from .entity import IQVIAEntity ATTR_ALLERGEN_AMOUNT = "allergen_amount" ATTR_ALLERGEN_GENUS = "allergen_genus"