From 37e5b98919d18505439755f0a4c85c10a15b0cf7 Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Thu, 25 Feb 2016 15:48:46 -0800 Subject: [PATCH] Fix mFi error handling in setup_platform The exception we were catching incorrectly referenced the client variable in local scope instead of the module. Also, if we fail to connect we can get a requests exception, so catch and handle that as well. --- homeassistant/components/sensor/mfi.py | 6 ++++-- homeassistant/components/switch/mfi.py | 6 ++++-- tests/components/sensor/test_mfi.py | 11 +++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/sensor/mfi.py b/homeassistant/components/sensor/mfi.py index 53b1726a210..37f1e73c607 100644 --- a/homeassistant/components/sensor/mfi.py +++ b/homeassistant/components/sensor/mfi.py @@ -6,6 +6,8 @@ https://home-assistant.io/components/sensor.mfi/ """ import logging +import requests + from homeassistant.components.sensor import DOMAIN from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, TEMP_CELCIUS from homeassistant.helpers import validate_config @@ -48,11 +50,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None): username = config.get(CONF_USERNAME) password = config.get(CONF_PASSWORD) - from mficlient.client import MFiClient + from mficlient.client import FailedToLogin, MFiClient try: client = MFiClient(host, username, password, port=port) - except client.FailedToLogin as ex: + except (FailedToLogin, requests.exceptions.ConnectionError) as ex: _LOGGER.error('Unable to connect to mFi: %s', str(ex)) return False diff --git a/homeassistant/components/switch/mfi.py b/homeassistant/components/switch/mfi.py index 42abe75af60..77346d224bd 100644 --- a/homeassistant/components/switch/mfi.py +++ b/homeassistant/components/switch/mfi.py @@ -8,6 +8,8 @@ https://home-assistant.io/components/switch.mfi/ """ import logging +import requests + from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.helpers import validate_config @@ -41,11 +43,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None): username = config.get('username') password = config.get('password') - from mficlient.client import MFiClient + from mficlient.client import FailedToLogin, MFiClient try: client = MFiClient(host, username, password, port=port) - except client.FailedToLogin as ex: + except (FailedToLogin, requests.exceptions.ConnectionError) as ex: _LOGGER.error('Unable to connect to mFi: %s', str(ex)) return False diff --git a/tests/components/sensor/test_mfi.py b/tests/components/sensor/test_mfi.py index 58506bdff1b..987466853b6 100644 --- a/tests/components/sensor/test_mfi.py +++ b/tests/components/sensor/test_mfi.py @@ -7,6 +7,8 @@ Tests mFi sensor. import unittest import unittest.mock as mock +import requests + import homeassistant.components.sensor as sensor import homeassistant.components.sensor.mfi as mfi from homeassistant.const import TEMP_CELCIUS @@ -54,6 +56,15 @@ class TestMfiSensorSetup(unittest.TestCase): dict(self.GOOD_CONFIG), None)) + @mock.patch('mficlient.client') + def test_setup_failed_connect(self, mock_client): + mock_client.FailedToLogin = Exception() + mock_client.MFiClient.side_effect = requests.exceptions.ConnectionError + self.assertFalse( + self.PLATFORM.setup_platform(self.hass, + dict(self.GOOD_CONFIG), + None)) + @mock.patch('mficlient.client.MFiClient') def test_setup_minimum(self, mock_client): config = dict(self.GOOD_CONFIG)