From afa7e0bfe875ec2df146658f85eddf97e5816cee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Mrozek?= <Michsior14@users.noreply.github.com>
Date: Mon, 14 Oct 2019 07:01:40 +0200
Subject: [PATCH] fix: exception after kaiterra api call timeout (#27622)

---
 homeassistant/components/kaiterra/__init__.py | 20 ++++++++---------
 .../components/kaiterra/air_quality.py        |  8 +++----
 homeassistant/components/kaiterra/api_data.py | 22 ++++++++-----------
 homeassistant/components/kaiterra/sensor.py   |  8 +++----
 4 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/homeassistant/components/kaiterra/__init__.py b/homeassistant/components/kaiterra/__init__.py
index 8c61ad54184..d043dc15eaf 100644
--- a/homeassistant/components/kaiterra/__init__.py
+++ b/homeassistant/components/kaiterra/__init__.py
@@ -1,35 +1,33 @@
 """Support for Kaiterra devices."""
 import voluptuous as vol
 
-from homeassistant.helpers.aiohttp_client import async_get_clientsession
-from homeassistant.helpers.event import async_track_time_interval
-from homeassistant.helpers.discovery import async_load_platform
-from homeassistant.helpers import config_validation as cv
-
 from homeassistant.const import (
     CONF_API_KEY,
-    CONF_DEVICES,
     CONF_DEVICE_ID,
+    CONF_DEVICES,
+    CONF_NAME,
     CONF_SCAN_INTERVAL,
     CONF_TYPE,
-    CONF_NAME,
 )
+from homeassistant.helpers import config_validation as cv
+from homeassistant.helpers.aiohttp_client import async_get_clientsession
+from homeassistant.helpers.discovery import async_load_platform
+from homeassistant.helpers.event import async_track_time_interval
 
+from .api_data import KaiterraApiData
 from .const import (
     AVAILABLE_AQI_STANDARDS,
-    AVAILABLE_UNITS,
     AVAILABLE_DEVICE_TYPES,
+    AVAILABLE_UNITS,
     CONF_AQI_STANDARD,
     CONF_PREFERRED_UNITS,
-    DOMAIN,
     DEFAULT_AQI_STANDARD,
     DEFAULT_PREFERRED_UNIT,
     DEFAULT_SCAN_INTERVAL,
+    DOMAIN,
     KAITERRA_COMPONENTS,
 )
 
-from .api_data import KaiterraApiData
-
 KAITERRA_DEVICE_SCHEMA = vol.Schema(
     {
         vol.Required(CONF_DEVICE_ID): cv.string,
diff --git a/homeassistant/components/kaiterra/air_quality.py b/homeassistant/components/kaiterra/air_quality.py
index 70699de394c..1de1a4bd6c5 100644
--- a/homeassistant/components/kaiterra/air_quality.py
+++ b/homeassistant/components/kaiterra/air_quality.py
@@ -1,16 +1,14 @@
 """Support for Kaiterra Air Quality Sensors."""
 from homeassistant.components.air_quality import AirQualityEntity
-
-from homeassistant.helpers.dispatcher import async_dispatcher_connect
-
 from homeassistant.const import CONF_DEVICE_ID, CONF_NAME
+from homeassistant.helpers.dispatcher import async_dispatcher_connect
 
 from .const import (
-    DOMAIN,
-    ATTR_VOC,
     ATTR_AQI_LEVEL,
     ATTR_AQI_POLLUTANT,
+    ATTR_VOC,
     DISPATCHER_KAITERRA,
+    DOMAIN,
 )
 
 
diff --git a/homeassistant/components/kaiterra/api_data.py b/homeassistant/components/kaiterra/api_data.py
index 81e28438d56..e0f4d817e03 100644
--- a/homeassistant/components/kaiterra/api_data.py
+++ b/homeassistant/components/kaiterra/api_data.py
@@ -1,21 +1,17 @@
 """Data for all Kaiterra devices."""
-from logging import getLogger
-
 import asyncio
-
-import async_timeout
+from logging import getLogger
 
 from aiohttp.client_exceptions import ClientResponseError
+import async_timeout
+from kaiterra_async_client import AQIStandard, KaiterraAPIClient, Units
 
-from kaiterra_async_client import KaiterraAPIClient, AQIStandard, Units
-
+from homeassistant.const import CONF_API_KEY, CONF_DEVICE_ID, CONF_DEVICES, CONF_TYPE
 from homeassistant.helpers.dispatcher import async_dispatcher_send
 
-from homeassistant.const import CONF_API_KEY, CONF_DEVICES, CONF_DEVICE_ID, CONF_TYPE
-
 from .const import (
-    AQI_SCALE,
     AQI_LEVEL,
+    AQI_SCALE,
     CONF_AQI_STANDARD,
     CONF_PREFERRED_UNITS,
     DISPATCHER_KAITERRA,
@@ -60,9 +56,10 @@ class KaiterraApiData:
             with async_timeout.timeout(10):
                 data = await self._api.get_latest_sensor_readings(self._devices)
         except (ClientResponseError, asyncio.TimeoutError):
-            _LOGGER.debug("Couldn't fetch data")
+            _LOGGER.debug("Couldn't fetch data from Kaiterra API")
             self.data = {}
             async_dispatcher_send(self._hass, DISPATCHER_KAITERRA)
+            return
 
         _LOGGER.debug("New data retrieved: %s", data)
 
@@ -102,8 +99,7 @@ class KaiterraApiData:
                 device["aqi_pollutant"] = {"value": main_pollutant}
 
                 self.data[self._devices_ids[i]] = device
-
-                async_dispatcher_send(self._hass, DISPATCHER_KAITERRA)
         except IndexError as err:
             _LOGGER.error("Parsing error %s", err)
-            async_dispatcher_send(self._hass, DISPATCHER_KAITERRA)
+
+        async_dispatcher_send(self._hass, DISPATCHER_KAITERRA)
diff --git a/homeassistant/components/kaiterra/sensor.py b/homeassistant/components/kaiterra/sensor.py
index 4ff6435b64d..e86d6f7d836 100644
--- a/homeassistant/components/kaiterra/sensor.py
+++ b/homeassistant/components/kaiterra/sensor.py
@@ -1,11 +1,9 @@
 """Support for Kaiterra Temperature ahn Humidity Sensors."""
-from homeassistant.helpers.entity import Entity
-
-from homeassistant.helpers.dispatcher import async_dispatcher_connect
-
 from homeassistant.const import CONF_DEVICE_ID, CONF_NAME, TEMP_CELSIUS, TEMP_FAHRENHEIT
+from homeassistant.helpers.dispatcher import async_dispatcher_connect
+from homeassistant.helpers.entity import Entity
 
-from .const import DOMAIN, DISPATCHER_KAITERRA
+from .const import DISPATCHER_KAITERRA, DOMAIN
 
 SENSORS = [
     {"name": "Temperature", "prop": "rtemp", "device_class": "temperature"},
-- 
GitLab