Keep track of a context for each listener (#72702)
* Remove async_remove_listener
This avoids the ambuigity as to what happens if same callback is added multiple times.
* Keep track of a context for each listener
This allow a update coordinator to adapt what data to request on update from the backing service based on which entities are enabled.
* Clone list before calling callbacks
The callbacks can end up unregistering and modifying the dict while iterating.
* Only yield actual values
* Add a test for update context
* Factor out iteration of _listeners to helper
* Verify context is passed to coordinator
* Switch to Any as type instead of object
* Remove function which use was dropped earliers
The use was removed in 8bee25c938
This commit is contained in:
parent
a28fa5377a
commit
8910d265d6
14 changed files with 95 additions and 115 deletions
|
@ -74,12 +74,12 @@ def modernforms_exception_handler(func):
|
|||
async def handler(self, *args, **kwargs):
|
||||
try:
|
||||
await func(self, *args, **kwargs)
|
||||
self.coordinator.update_listeners()
|
||||
self.coordinator.async_update_listeners()
|
||||
|
||||
except ModernFormsConnectionError as error:
|
||||
_LOGGER.error("Error communicating with API: %s", error)
|
||||
self.coordinator.last_update_success = False
|
||||
self.coordinator.update_listeners()
|
||||
self.coordinator.async_update_listeners()
|
||||
|
||||
except ModernFormsError as error:
|
||||
_LOGGER.error("Invalid response from API: %s", error)
|
||||
|
@ -108,11 +108,6 @@ class ModernFormsDataUpdateCoordinator(DataUpdateCoordinator[ModernFormsDeviceSt
|
|||
update_interval=SCAN_INTERVAL,
|
||||
)
|
||||
|
||||
def update_listeners(self) -> None:
|
||||
"""Call update on all listeners."""
|
||||
for update_callback in self._listeners:
|
||||
update_callback()
|
||||
|
||||
async def _async_update_data(self) -> ModernFormsDevice:
|
||||
"""Fetch data from Modern Forms."""
|
||||
try:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue