Fix IQVIA failing to start if any API call fails (#50615)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
parent
960ed13f94
commit
9c5f1b4406
2 changed files with 13 additions and 4 deletions
|
@ -9,6 +9,7 @@ from pyiqvia.errors import IQVIAError
|
||||||
from homeassistant.components.sensor import SensorEntity
|
from homeassistant.components.sensor import SensorEntity
|
||||||
from homeassistant.const import ATTR_ATTRIBUTION
|
from homeassistant.const import ATTR_ATTRIBUTION
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
|
from homeassistant.exceptions import ConfigEntryNotReady
|
||||||
from homeassistant.helpers import aiohttp_client
|
from homeassistant.helpers import aiohttp_client
|
||||||
from homeassistant.helpers.update_coordinator import (
|
from homeassistant.helpers.update_coordinator import (
|
||||||
CoordinatorEntity,
|
CoordinatorEntity,
|
||||||
|
@ -74,9 +75,14 @@ async def async_setup_entry(hass, entry):
|
||||||
update_interval=DEFAULT_SCAN_INTERVAL,
|
update_interval=DEFAULT_SCAN_INTERVAL,
|
||||||
update_method=partial(async_get_data_from_api, api_coro),
|
update_method=partial(async_get_data_from_api, api_coro),
|
||||||
)
|
)
|
||||||
init_data_update_tasks.append(coordinator.async_config_entry_first_refresh())
|
init_data_update_tasks.append(coordinator.async_refresh())
|
||||||
|
|
||||||
await asyncio.gather(*init_data_update_tasks)
|
results = await asyncio.gather(*init_data_update_tasks, return_exceptions=True)
|
||||||
|
if all(isinstance(result, Exception) for result in results):
|
||||||
|
# The IQVIA API can be selectively flaky, meaning that any number of the setup
|
||||||
|
# API calls could fail. We only retry integration setup if *all* of the initial
|
||||||
|
# API calls fail:
|
||||||
|
raise ConfigEntryNotReady()
|
||||||
|
|
||||||
hass.data[DOMAIN].setdefault(DATA_COORDINATOR, {})[entry.entry_id] = coordinators
|
hass.data[DOMAIN].setdefault(DATA_COORDINATOR, {})[entry.entry_id] = coordinators
|
||||||
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
hass.config_entries.async_setup_platforms(entry, PLATFORMS)
|
||||||
|
|
|
@ -104,9 +104,12 @@ class ForecastSensor(IQVIAEntity):
|
||||||
@callback
|
@callback
|
||||||
def update_from_latest_data(self):
|
def update_from_latest_data(self):
|
||||||
"""Update the sensor."""
|
"""Update the sensor."""
|
||||||
data = self.coordinator.data.get("Location")
|
if not self.coordinator.data:
|
||||||
|
return
|
||||||
|
|
||||||
if not data or not data.get("periods"):
|
data = self.coordinator.data.get("Location", {})
|
||||||
|
|
||||||
|
if not data.get("periods"):
|
||||||
return
|
return
|
||||||
|
|
||||||
indices = [p["Index"] for p in data["periods"]]
|
indices = [p["Index"] for p in data["periods"]]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue