From 2e989b16adfc68127b6e731335420aab4f08ee86 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sat, 7 Jan 2023 14:52:06 +0100 Subject: [PATCH] Improve DataUpdateCoordinator typing in integrations (9) (#85332) --- homeassistant/components/tile/__init__.py | 4 ++-- homeassistant/components/tile/device_tracker.py | 4 ++-- homeassistant/components/twentemilieu/calendar.py | 6 ++++-- homeassistant/components/twentemilieu/diagnostics.py | 9 +++++++-- homeassistant/components/twentemilieu/sensor.py | 2 +- homeassistant/components/wiz/models.py | 4 +++- homeassistant/components/xiaomi_miio/__init__.py | 3 ++- tests/components/twentemilieu/test_diagnostics.py | 10 +++++----- 8 files changed, 26 insertions(+), 16 deletions(-) diff --git a/homeassistant/components/tile/__init__.py b/homeassistant/components/tile/__init__.py index 38f52a067fa..3b00ea8421b 100644 --- a/homeassistant/components/tile/__init__.py +++ b/homeassistant/components/tile/__init__.py @@ -33,7 +33,7 @@ CONF_SHOW_INACTIVE = "show_inactive" class TileData: """Define an object to be stored in `hass.data`.""" - coordinators: dict[str, DataUpdateCoordinator] + coordinators: dict[str, DataUpdateCoordinator[None]] tiles: dict[str, Tile] @@ -94,7 +94,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: except TileError as err: raise UpdateFailed(f"Error while retrieving data: {err}") from err - coordinators = {} + coordinators: dict[str, DataUpdateCoordinator[None]] = {} coordinator_init_tasks = [] for tile_uuid, tile in tiles.items(): diff --git a/homeassistant/components/tile/device_tracker.py b/homeassistant/components/tile/device_tracker.py index 3ff8d86dff4..8dba892de83 100644 --- a/homeassistant/components/tile/device_tracker.py +++ b/homeassistant/components/tile/device_tracker.py @@ -78,13 +78,13 @@ async def async_setup_scanner( return True -class TileDeviceTracker(CoordinatorEntity, TrackerEntity): +class TileDeviceTracker(CoordinatorEntity[DataUpdateCoordinator[None]], TrackerEntity): """Representation of a network infrastructure device.""" _attr_icon = DEFAULT_ICON def __init__( - self, entry: ConfigEntry, coordinator: DataUpdateCoordinator, tile: Tile + self, entry: ConfigEntry, coordinator: DataUpdateCoordinator[None], tile: Tile ) -> None: """Initialize.""" super().__init__(coordinator) diff --git a/homeassistant/components/twentemilieu/calendar.py b/homeassistant/components/twentemilieu/calendar.py index 8bcf1b1d390..d3685051734 100644 --- a/homeassistant/components/twentemilieu/calendar.py +++ b/homeassistant/components/twentemilieu/calendar.py @@ -1,7 +1,9 @@ """Support for Twente Milieu Calendar.""" from __future__ import annotations -from datetime import datetime +from datetime import date, datetime + +from twentemilieu import WasteType from homeassistant.components.calendar import CalendarEntity, CalendarEvent from homeassistant.config_entries import ConfigEntry @@ -33,7 +35,7 @@ class TwenteMilieuCalendar(TwenteMilieuEntity, CalendarEntity): def __init__( self, - coordinator: DataUpdateCoordinator, + coordinator: DataUpdateCoordinator[dict[WasteType, list[date]]], entry: ConfigEntry, ) -> None: """Initialize the Twente Milieu entity.""" diff --git a/homeassistant/components/twentemilieu/diagnostics.py b/homeassistant/components/twentemilieu/diagnostics.py index a158ead0909..5a47e5282a4 100644 --- a/homeassistant/components/twentemilieu/diagnostics.py +++ b/homeassistant/components/twentemilieu/diagnostics.py @@ -1,8 +1,11 @@ """Diagnostics support for TwenteMilieu.""" from __future__ import annotations +from datetime import date from typing import Any +from twentemilieu import WasteType + from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_ID from homeassistant.core import HomeAssistant @@ -15,8 +18,10 @@ async def async_get_config_entry_diagnostics( hass: HomeAssistant, entry: ConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" - coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.data[CONF_ID]] + coordinator: DataUpdateCoordinator[dict[WasteType, list[date]]] = hass.data[DOMAIN][ + entry.data[CONF_ID] + ] return { - waste_type: [waste_date.isoformat() for waste_date in waste_dates] + str(waste_type): [waste_date.isoformat() for waste_date in waste_dates] for waste_type, waste_dates in coordinator.data.items() } diff --git a/homeassistant/components/twentemilieu/sensor.py b/homeassistant/components/twentemilieu/sensor.py index ab69aba9abf..ab0a60c44ca 100644 --- a/homeassistant/components/twentemilieu/sensor.py +++ b/homeassistant/components/twentemilieu/sensor.py @@ -93,7 +93,7 @@ class TwenteMilieuSensor(TwenteMilieuEntity, SensorEntity): def __init__( self, - coordinator: DataUpdateCoordinator, + coordinator: DataUpdateCoordinator[dict[WasteType, list[date]]], description: TwenteMilieuSensorDescription, entry: ConfigEntry, ) -> None: diff --git a/homeassistant/components/wiz/models.py b/homeassistant/components/wiz/models.py index efbb2a664b1..547ff830303 100644 --- a/homeassistant/components/wiz/models.py +++ b/homeassistant/components/wiz/models.py @@ -1,4 +1,6 @@ """WiZ integration models.""" +from __future__ import annotations + from dataclasses import dataclass from pywizlight import wizlight @@ -10,6 +12,6 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator class WizData: """Data for the wiz integration.""" - coordinator: DataUpdateCoordinator + coordinator: DataUpdateCoordinator[float | None] bulb: wizlight scenes: list diff --git a/homeassistant/components/xiaomi_miio/__init__.py b/homeassistant/components/xiaomi_miio/__init__.py index 6e8d0831445..fd5c8b80c26 100644 --- a/homeassistant/components/xiaomi_miio/__init__.py +++ b/homeassistant/components/xiaomi_miio/__init__.py @@ -4,6 +4,7 @@ from __future__ import annotations from dataclasses import dataclass from datetime import timedelta import logging +from typing import Any import async_timeout from miio import ( @@ -289,7 +290,7 @@ async def async_create_miio_device_and_coordinator( device: MiioDevice | None = None migrate = False update_method = _async_update_data_default - coordinator_class: type[DataUpdateCoordinator] = DataUpdateCoordinator + coordinator_class: type[DataUpdateCoordinator[Any]] = DataUpdateCoordinator if ( model not in MODELS_HUMIDIFIER diff --git a/tests/components/twentemilieu/test_diagnostics.py b/tests/components/twentemilieu/test_diagnostics.py index efbe2fc3104..ac5da4ea14f 100644 --- a/tests/components/twentemilieu/test_diagnostics.py +++ b/tests/components/twentemilieu/test_diagnostics.py @@ -16,9 +16,9 @@ async def test_diagnostics( assert await get_diagnostics_for_config_entry( hass, hass_client, init_integration ) == { - "0": ["2021-11-01", "2021-12-01"], - "1": ["2021-11-02"], - "2": [], - "6": ["2022-01-06"], - "10": ["2021-11-03"], + "WasteType.NON_RECYCLABLE": ["2021-11-01", "2021-12-01"], + "WasteType.ORGANIC": ["2021-11-02"], + "WasteType.PAPER": [], + "WasteType.TREE": ["2022-01-06"], + "WasteType.PACKAGES": ["2021-11-03"], }