From 9bb94a45120448b83630728292f142a61c128aaa Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Fri, 11 Nov 2016 07:28:22 +0200 Subject: [PATCH] Improve async generic camera's error handling (#4316) * Handle errors * Feedback * DisconnectedError --- homeassistant/components/camera/generic.py | 16 +++++++++------- homeassistant/components/sensor/yr.py | 9 +++------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/camera/generic.py b/homeassistant/components/camera/generic.py index e298bed2a92..ec85e6306d4 100644 --- a/homeassistant/components/camera/generic.py +++ b/homeassistant/components/camera/generic.py @@ -91,7 +91,7 @@ class GenericCamera(Camera): if url == self._last_url and self._limit_refetch: return self._last_image - # aiohttp don't support DigestAuth jet + # aiohttp don't support DigestAuth yet if self._authentication == HTTP_DIGEST_AUTHENTICATION: def fetch(): """Read image from a URL.""" @@ -109,15 +109,17 @@ class GenericCamera(Camera): else: try: with async_timeout.timeout(10, loop=self.hass.loop): - respone = yield from self.hass.websession.get( - url, - auth=self._auth - ) - self._last_image = yield from respone.read() - yield from respone.release() + response = yield from self.hass.websession.get( + url, auth=self._auth) + self._last_image = yield from response.read() + yield from response.release() except asyncio.TimeoutError: _LOGGER.error('Timeout getting camera image') return self._last_image + except (aiohttp.errors.ClientError, + aiohttp.errors.ClientDisconnectedError) as err: + _LOGGER.error('Error getting new camera image: %s', err) + return self._last_image self._last_url = url return self._last_image diff --git a/homeassistant/components/sensor/yr.py b/homeassistant/components/sensor/yr.py index dd53df9a7fe..3436288b627 100644 --- a/homeassistant/components/sensor/yr.py +++ b/homeassistant/components/sensor/yr.py @@ -10,7 +10,7 @@ import logging from xml.parsers.expat import ExpatError import async_timeout -from aiohttp.web import HTTPException +import aiohttp import voluptuous as vol import homeassistant.helpers.config_validation as cv @@ -155,11 +155,8 @@ class YrData(object): return text = yield from resp.text() self.hass.async_add_job(resp.release()) - except asyncio.TimeoutError as err: - try_again(err) - return - except HTTPException as err: - resp.close() + except (asyncio.TimeoutError, aiohttp.errors.ClientError, + aiohttp.errors.ClientDisconnectedError) as err: try_again(err) return