From 8903aecb77e9afe218eba539d5f42ad381aae013 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Tue, 2 Jan 2024 11:38:20 +0100 Subject: [PATCH] Enable strict typing for airthings (#106814) --- .strict-typing | 1 + homeassistant/components/airthings/__init__.py | 8 +++++--- homeassistant/components/airthings/sensor.py | 16 ++++++++-------- mypy.ini | 10 ++++++++++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.strict-typing b/.strict-typing index 6bc8942486b..b00fd677f3c 100644 --- a/.strict-typing +++ b/.strict-typing @@ -51,6 +51,7 @@ homeassistant.components.air_quality.* homeassistant.components.airly.* homeassistant.components.airnow.* homeassistant.components.airq.* +homeassistant.components.airthings.* homeassistant.components.airthings_ble.* homeassistant.components.airvisual.* homeassistant.components.airvisual_pro.* diff --git a/homeassistant/components/airthings/__init__.py b/homeassistant/components/airthings/__init__.py index d596c1db757..a5b962d1bf7 100644 --- a/homeassistant/components/airthings/__init__.py +++ b/homeassistant/components/airthings/__init__.py @@ -4,7 +4,7 @@ from __future__ import annotations from datetime import timedelta import logging -from airthings import Airthings, AirthingsError +from airthings import Airthings, AirthingsDevice, AirthingsError from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_ID, Platform @@ -19,6 +19,8 @@ _LOGGER = logging.getLogger(__name__) PLATFORMS: list[Platform] = [Platform.SENSOR] SCAN_INTERVAL = timedelta(minutes=6) +AirthingsDataCoordinatorType = DataUpdateCoordinator[dict[str, AirthingsDevice]] + async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Airthings from a config entry.""" @@ -30,10 +32,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async_get_clientsession(hass), ) - async def _update_method(): + async def _update_method() -> dict[str, AirthingsDevice]: """Get the latest data from Airthings.""" try: - return await airthings.update_devices() + return await airthings.update_devices() # type: ignore[no-any-return] except AirthingsError as err: raise UpdateFailed(f"Unable to fetch data: {err}") from err diff --git a/homeassistant/components/airthings/sensor.py b/homeassistant/components/airthings/sensor.py index cd4e9d52f6b..3802a735a99 100644 --- a/homeassistant/components/airthings/sensor.py +++ b/homeassistant/components/airthings/sensor.py @@ -24,11 +24,9 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType -from homeassistant.helpers.update_coordinator import ( - CoordinatorEntity, - DataUpdateCoordinator, -) +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from . import AirthingsDataCoordinatorType from .const import DOMAIN SENSORS: dict[str, SensorEntityDescription] = { @@ -108,7 +106,7 @@ async def async_setup_entry( ) -> None: """Set up the Airthings sensor.""" - coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + coordinator: AirthingsDataCoordinatorType = hass.data[DOMAIN][entry.entry_id] entities = [ AirthingsHeaterEnergySensor( coordinator, @@ -122,7 +120,9 @@ async def async_setup_entry( async_add_entities(entities) -class AirthingsHeaterEnergySensor(CoordinatorEntity, SensorEntity): +class AirthingsHeaterEnergySensor( + CoordinatorEntity[AirthingsDataCoordinatorType], SensorEntity +): """Representation of a Airthings Sensor device.""" _attr_state_class = SensorStateClass.MEASUREMENT @@ -130,7 +130,7 @@ class AirthingsHeaterEnergySensor(CoordinatorEntity, SensorEntity): def __init__( self, - coordinator: DataUpdateCoordinator, + coordinator: AirthingsDataCoordinatorType, airthings_device: AirthingsDevice, entity_description: SensorEntityDescription, ) -> None: @@ -155,4 +155,4 @@ class AirthingsHeaterEnergySensor(CoordinatorEntity, SensorEntity): @property def native_value(self) -> StateType: """Return the value reported by the sensor.""" - return self.coordinator.data[self._id].sensors[self.entity_description.key] + return self.coordinator.data[self._id].sensors[self.entity_description.key] # type: ignore[no-any-return] diff --git a/mypy.ini b/mypy.ini index 173b2dbd838..9ffe5e48c1f 100644 --- a/mypy.ini +++ b/mypy.ini @@ -270,6 +270,16 @@ disallow_untyped_defs = true warn_return_any = true warn_unreachable = true +[mypy-homeassistant.components.airthings.*] +check_untyped_defs = true +disallow_incomplete_defs = true +disallow_subclassing_any = true +disallow_untyped_calls = true +disallow_untyped_decorators = true +disallow_untyped_defs = true +warn_return_any = true +warn_unreachable = true + [mypy-homeassistant.components.airthings_ble.*] check_untyped_defs = true disallow_incomplete_defs = true