From a76b1ef5b567cf11429b6c0bb554a85cdf6db0bc Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 13 Sep 2023 21:29:22 +0200 Subject: [PATCH] Teach CoordinatorEntity to cooperate with its siblings --- homeassistant/components/scrape/sensor.py | 7 +++++-- homeassistant/helpers/update_coordinator.py | 19 ++++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/scrape/sensor.py b/homeassistant/components/scrape/sensor.py index ceaf1e63a9d..c669cfeff0c 100644 --- a/homeassistant/components/scrape/sensor.py +++ b/homeassistant/components/scrape/sensor.py @@ -155,8 +155,11 @@ class ScrapeSensor(CoordinatorEntity[ScrapeCoordinator], ManualTriggerSensorEnti yaml: bool, ) -> None: """Initialize a web scrape sensor.""" - CoordinatorEntity.__init__(self, coordinator) - ManualTriggerSensorEntity.__init__(self, hass, trigger_entity_config) + super().__init__( + config=trigger_entity_config, + coordinator=coordinator, + hass=hass, + ) self._select = select self._attr = attr self._index = index diff --git a/homeassistant/helpers/update_coordinator.py b/homeassistant/helpers/update_coordinator.py index 7cb1082d34d..52c6d0a2cdb 100644 --- a/homeassistant/helpers/update_coordinator.py +++ b/homeassistant/helpers/update_coordinator.py @@ -7,6 +7,7 @@ import asyncio from collections.abc import Awaitable, Callable, Coroutine, Generator from datetime import datetime, timedelta from functools import cached_property +from inspect import Parameter, signature import logging from random import randint from time import monotonic @@ -466,9 +467,21 @@ class BaseCoordinatorEntity[ """Base class for all Coordinator entities.""" def __init__( - self, coordinator: _BaseDataUpdateCoordinatorT, context: Any = None + self, + coordinator: _BaseDataUpdateCoordinatorT, + context: Any = None, + **kwargs: Any, ) -> None: """Create the entity with a DataUpdateCoordinator.""" + call_super = True + if not kwargs: + super_parameters = signature(super().__init__).parameters + for param in super_parameters.values(): + if param.default == Parameter.empty: + call_super = False + break + if call_super: + super().__init__(**kwargs) self.coordinator = coordinator self.coordinator_context = context @@ -503,7 +516,7 @@ class CoordinatorEntity(BaseCoordinatorEntity[_DataUpdateCoordinatorT]): """A class for entities using DataUpdateCoordinator.""" def __init__( - self, coordinator: _DataUpdateCoordinatorT, context: Any = None + self, coordinator: _DataUpdateCoordinatorT, context: Any = None, **kwargs: Any ) -> None: """Create the entity with a DataUpdateCoordinator. @@ -511,7 +524,7 @@ class CoordinatorEntity(BaseCoordinatorEntity[_DataUpdateCoordinatorT]): Necessary to bind TypeVar to correct scope. """ - super().__init__(coordinator, context) + super().__init__(coordinator=coordinator, context=context, **kwargs) @property def available(self) -> bool: