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.
This commit is contained in:
Dan Smith 2016-02-25 15:48:46 -08:00
parent dc02370b43
commit 37e5b98919
3 changed files with 19 additions and 4 deletions

View File

@ -6,6 +6,8 @@ https://home-assistant.io/components/sensor.mfi/
""" """
import logging import logging
import requests
from homeassistant.components.sensor import DOMAIN from homeassistant.components.sensor import DOMAIN
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, TEMP_CELCIUS from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, TEMP_CELCIUS
from homeassistant.helpers import validate_config 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) username = config.get(CONF_USERNAME)
password = config.get(CONF_PASSWORD) password = config.get(CONF_PASSWORD)
from mficlient.client import MFiClient from mficlient.client import FailedToLogin, MFiClient
try: try:
client = MFiClient(host, username, password, port=port) 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)) _LOGGER.error('Unable to connect to mFi: %s', str(ex))
return False return False

View File

@ -8,6 +8,8 @@ https://home-assistant.io/components/switch.mfi/
""" """
import logging import logging
import requests
from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.components.switch import DOMAIN, SwitchDevice
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.helpers import validate_config from homeassistant.helpers import validate_config
@ -41,11 +43,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
username = config.get('username') username = config.get('username')
password = config.get('password') password = config.get('password')
from mficlient.client import MFiClient from mficlient.client import FailedToLogin, MFiClient
try: try:
client = MFiClient(host, username, password, port=port) 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)) _LOGGER.error('Unable to connect to mFi: %s', str(ex))
return False return False

View File

@ -7,6 +7,8 @@ Tests mFi sensor.
import unittest import unittest
import unittest.mock as mock import unittest.mock as mock
import requests
import homeassistant.components.sensor as sensor import homeassistant.components.sensor as sensor
import homeassistant.components.sensor.mfi as mfi import homeassistant.components.sensor.mfi as mfi
from homeassistant.const import TEMP_CELCIUS from homeassistant.const import TEMP_CELCIUS
@ -54,6 +56,15 @@ class TestMfiSensorSetup(unittest.TestCase):
dict(self.GOOD_CONFIG), dict(self.GOOD_CONFIG),
None)) 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') @mock.patch('mficlient.client.MFiClient')
def test_setup_minimum(self, mock_client): def test_setup_minimum(self, mock_client):
config = dict(self.GOOD_CONFIG) config = dict(self.GOOD_CONFIG)