diff --git a/homeassistant/components/iqvia/__init__.py b/homeassistant/components/iqvia/__init__.py index aad505e23c4..def58d60201 100644 --- a/homeassistant/components/iqvia/__init__.py +++ b/homeassistant/components/iqvia/__init__.py @@ -2,10 +2,10 @@ from __future__ import annotations import asyncio -from collections.abc import Awaitable, Callable +from collections.abc import Callable, Coroutine from datetime import timedelta from functools import partial -from typing import Any, cast +from typing import Any from pyiqvia import Client from pyiqvia.errors import IQVIAError @@ -57,16 +57,14 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: client.disable_request_retries() async def async_get_data_from_api( - api_coro: Callable[..., Awaitable] + api_coro: Callable[..., Coroutine[Any, Any, dict[str, Any]]] ) -> dict[str, Any]: """Get data from a particular API coroutine.""" try: - data = await api_coro() + return await api_coro() except IQVIAError as err: raise UpdateFailed from err - return cast(dict[str, Any], data) - coordinators = {} init_data_update_tasks = [] @@ -115,14 +113,14 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return unload_ok -class IQVIAEntity(CoordinatorEntity): +class IQVIAEntity(CoordinatorEntity[DataUpdateCoordinator[dict[str, Any]]]): """Define a base IQVIA entity.""" _attr_has_entity_name = True def __init__( self, - coordinator: DataUpdateCoordinator, + coordinator: DataUpdateCoordinator[dict[str, Any]], entry: ConfigEntry, description: EntityDescription, ) -> None: diff --git a/homeassistant/components/iqvia/diagnostics.py b/homeassistant/components/iqvia/diagnostics.py index 664467b0702..6f2df6bd7d3 100644 --- a/homeassistant/components/iqvia/diagnostics.py +++ b/homeassistant/components/iqvia/diagnostics.py @@ -35,7 +35,9 @@ async def async_get_config_entry_diagnostics( hass: HomeAssistant, entry: ConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" - coordinators: dict[str, DataUpdateCoordinator] = hass.data[DOMAIN][entry.entry_id] + coordinators: dict[str, DataUpdateCoordinator[dict[str, Any]]] = hass.data[DOMAIN][ + entry.entry_id + ] return { "entry": async_redact_data(entry.as_dict(), TO_REDACT), diff --git a/homeassistant/components/iqvia/sensor.py b/homeassistant/components/iqvia/sensor.py index 455711c0ead..0052e90880b 100644 --- a/homeassistant/components/iqvia/sensor.py +++ b/homeassistant/components/iqvia/sensor.py @@ -2,7 +2,7 @@ from __future__ import annotations from statistics import mean -from typing import NamedTuple +from typing import Any, NamedTuple, cast import numpy as np @@ -247,10 +247,11 @@ class IndexSensor(IQVIAEntity, SensorEntity): key = self.entity_description.key.split("_")[-1].title() try: - [period] = [p for p in data["periods"] if p["Type"] == key] - except ValueError: + [period] = [p for p in data["periods"] if p["Type"] == key] # type: ignore[index] + except TypeError: return + data = cast(dict[str, Any], data) [rating] = [ i.label for i in RATING_MAPPING if i.minimum <= period["Index"] <= i.maximum ]