core/homeassistant/components/upnp/coordinator.py

51 lines
1.5 KiB
Python

"""UPnP/IGD coordinator."""
from collections.abc import Mapping
from datetime import timedelta
from typing import Any
from async_upnp_client.exceptions import UpnpCommunicationError
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceEntry
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import LOGGER
from .device import Device
class UpnpDataUpdateCoordinator(DataUpdateCoordinator):
"""Define an object to update data from UPNP device."""
def __init__(
self,
hass: HomeAssistant,
device: Device,
device_entry: DeviceEntry,
update_interval: timedelta,
) -> None:
"""Initialize."""
self.device = device
self.device_entry = device_entry
super().__init__(
hass,
LOGGER,
name=device.name,
update_interval=update_interval,
)
async def _async_update_data(self) -> Mapping[str, Any]:
"""Update data."""
try:
return await self.device.async_get_data()
except UpnpCommunicationError as exception:
LOGGER.debug(
"Caught exception when updating device: %s, exception: %s",
self.device,
exception,
)
raise UpdateFailed(
f"Unable to communicate with IGD at: {self.device.device_url}"
) from exception