From df02879c51c4f87514e376e3a2a0f7db7a75a285 Mon Sep 17 00:00:00 2001 From: David Bonnes Date: Thu, 18 Apr 2019 13:37:52 +0100 Subject: [PATCH] Improve configuration schema for Geniushub integration (#23155) * configuration for hub tokens are now separate from host addresses/credentials * small change to docstring * use *args **kwargs --- .../components/geniushub/__init__.py | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/geniushub/__init__.py b/homeassistant/components/geniushub/__init__.py index 90e04db0111..aa57af55852 100644 --- a/homeassistant/components/geniushub/__init__.py +++ b/homeassistant/components/geniushub/__init__.py @@ -1,10 +1,10 @@ -"""This module connects to the Genius hub and shares the data.""" +"""This module connects to a Genius hub and shares the data.""" import logging import voluptuous as vol from homeassistant.const import ( - CONF_HOST, CONF_PASSWORD, CONF_USERNAME) + CONF_HOST, CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME) 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 @@ -13,12 +13,19 @@ _LOGGER = logging.getLogger(__name__) DOMAIN = 'geniushub' +_V1_API_SCHEMA = vol.Schema({ + vol.Required(CONF_TOKEN): cv.string, +}) +_V3_API_SCHEMA = vol.Schema({ + vol.Required(CONF_HOST): cv.string, + vol.Required(CONF_USERNAME): cv.string, + vol.Required(CONF_PASSWORD): cv.string, +}) CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - vol.Optional(CONF_USERNAME): cv.string, - vol.Optional(CONF_PASSWORD): cv.string, - vol.Required(CONF_HOST): cv.string, - }), + DOMAIN: vol.Any( + _V3_API_SCHEMA, + _V1_API_SCHEMA, + ) }, extra=vol.ALLOW_EXTRA) @@ -26,16 +33,17 @@ async def async_setup(hass, hass_config): """Create a Genius Hub system.""" from geniushubclient import GeniusHubClient # noqa; pylint: disable=no-name-in-module - host = hass_config[DOMAIN].get(CONF_HOST) - username = hass_config[DOMAIN].get(CONF_USERNAME) - password = hass_config[DOMAIN].get(CONF_PASSWORD) - geniushub_data = hass.data[DOMAIN] = {} + kwargs = dict(hass_config[DOMAIN]) + if CONF_HOST in kwargs: + args = (kwargs.pop(CONF_HOST), ) + else: + args = (kwargs.pop(CONF_TOKEN), ) + try: client = geniushub_data['client'] = GeniusHubClient( - host, username, password, - session=async_get_clientsession(hass) + *args, **kwargs, session=async_get_clientsession(hass) ) await client.hub.update()