From 9c1944f830eb045b20d088151dd5eec3ca88bca2 Mon Sep 17 00:00:00 2001 From: Jan-Philipp Benecke Date: Tue, 26 Sep 2023 08:13:59 +0200 Subject: [PATCH] Enable strict typing in london underground (#100563) * Enable strict typing in london underground * Change typing from Any * Remove redundant cast * Change from Mapping to dict --- .strict-typing | 1 + .../components/london_underground/coordinator.py | 12 ++++++++---- .../components/london_underground/sensor.py | 9 +++++---- mypy.ini | 10 ++++++++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.strict-typing b/.strict-typing index 97af46884c4..439831790b0 100644 --- a/.strict-typing +++ b/.strict-typing @@ -214,6 +214,7 @@ homeassistant.components.local_ip.* homeassistant.components.lock.* homeassistant.components.logbook.* homeassistant.components.logger.* +homeassistant.components.london_underground.* homeassistant.components.lookin.* homeassistant.components.luftdaten.* homeassistant.components.mailbox.* diff --git a/homeassistant/components/london_underground/coordinator.py b/homeassistant/components/london_underground/coordinator.py index a094d099896..2d3fd6b970f 100644 --- a/homeassistant/components/london_underground/coordinator.py +++ b/homeassistant/components/london_underground/coordinator.py @@ -3,7 +3,11 @@ from __future__ import annotations import asyncio import logging +from typing import cast +from london_tube_status import TubeData + +from homeassistant.core import HomeAssistant from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from .const import DOMAIN, SCAN_INTERVAL @@ -11,10 +15,10 @@ from .const import DOMAIN, SCAN_INTERVAL _LOGGER = logging.getLogger(__name__) -class LondonTubeCoordinator(DataUpdateCoordinator): +class LondonTubeCoordinator(DataUpdateCoordinator[dict[str, dict[str, str]]]): """London Underground sensor coordinator.""" - def __init__(self, hass, data): + def __init__(self, hass: HomeAssistant, data: TubeData) -> None: """Initialize coordinator.""" super().__init__( hass, @@ -24,7 +28,7 @@ class LondonTubeCoordinator(DataUpdateCoordinator): ) self._data = data - async def _async_update_data(self): + async def _async_update_data(self) -> dict[str, dict[str, str]]: async with asyncio.timeout(10): await self._data.update() - return self._data.data + return cast(dict[str, dict[str, str]], self._data.data) diff --git a/homeassistant/components/london_underground/sensor.py b/homeassistant/components/london_underground/sensor.py index c0d0eeca372..3f5ec42521e 100644 --- a/homeassistant/components/london_underground/sensor.py +++ b/homeassistant/components/london_underground/sensor.py @@ -2,6 +2,7 @@ from __future__ import annotations import logging +from typing import Any from london_tube_status import TubeData import voluptuous as vol @@ -56,22 +57,22 @@ class LondonTubeSensor(CoordinatorEntity[LondonTubeCoordinator], SensorEntity): _attr_attribution = "Powered by TfL Open Data" _attr_icon = "mdi:subway" - def __init__(self, coordinator, name): + def __init__(self, coordinator: LondonTubeCoordinator, name: str) -> None: """Initialize the London Underground sensor.""" super().__init__(coordinator) self._name = name @property - def name(self): + def name(self) -> str: """Return the name of the sensor.""" return self._name @property - def native_value(self): + def native_value(self) -> str: """Return the state of the sensor.""" return self.coordinator.data[self.name]["State"] @property - def extra_state_attributes(self): + def extra_state_attributes(self) -> dict[str, Any]: """Return other details about the sensor state.""" return {"Description": self.coordinator.data[self.name]["Description"]} diff --git a/mypy.ini b/mypy.ini index 67390ef2ddf..f18e781fd23 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1902,6 +1902,16 @@ disallow_untyped_defs = true warn_return_any = true warn_unreachable = true +[mypy-homeassistant.components.london_underground.*] +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.lookin.*] check_untyped_defs = true disallow_incomplete_defs = true