Merge pull request #1402 from kk7ds/fix-mfi-connect-exception

Fix mFi error handling in setup_platform
This commit is contained in:
Paulus Schoutsen 2016-02-25 17:06:03 -08:00
commit dd45b5e0b1
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)