From db40b2fc3224cd70c2b23bc7d53cf23bde4c84f0 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Mon, 24 Feb 2020 13:02:33 -0700 Subject: [PATCH] Handle unhandled IQVIA data update exception (#32144) * Handle unhandled IQVIA data update exception * Cleanup * Ask for forgiveness, not permission * Use warning-level logs * Fix log messages --- homeassistant/components/iqvia/sensor.py | 33 +++++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/iqvia/sensor.py b/homeassistant/components/iqvia/sensor.py index 09edca52895..24ccfa9cdbf 100644 --- a/homeassistant/components/iqvia/sensor.py +++ b/homeassistant/components/iqvia/sensor.py @@ -134,21 +134,34 @@ class IndexSensor(IQVIAEntity): async def async_update(self): """Update the sensor.""" if not self._iqvia.data: + _LOGGER.warning( + "IQVIA didn't return data for %s; trying again later", self.name + ) return - data = {} - if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW): - data = self._iqvia.data[TYPE_ALLERGY_INDEX].get("Location") - elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW): - data = self._iqvia.data[TYPE_ASTHMA_INDEX].get("Location") - elif self._type == TYPE_DISEASE_TODAY: - data = self._iqvia.data[TYPE_DISEASE_INDEX].get("Location") - - if not data: + try: + if self._type in (TYPE_ALLERGY_TODAY, TYPE_ALLERGY_TOMORROW): + data = self._iqvia.data[TYPE_ALLERGY_INDEX].get("Location") + elif self._type in (TYPE_ASTHMA_TODAY, TYPE_ASTHMA_TOMORROW): + data = self._iqvia.data[TYPE_ASTHMA_INDEX].get("Location") + elif self._type == TYPE_DISEASE_TODAY: + data = self._iqvia.data[TYPE_DISEASE_INDEX].get("Location") + except KeyError: + _LOGGER.warning( + "IQVIA didn't return data for %s; trying again later", self.name + ) return key = self._type.split("_")[-1].title() - [period] = [p for p in data["periods"] if p["Type"] == key] + + try: + [period] = [p for p in data["periods"] if p["Type"] == key] + except ValueError: + _LOGGER.warning( + "IQVIA didn't return data for %s; trying again later", self.name + ) + return + [rating] = [ i["label"] for i in RATING_MAPPING