core/homeassistant/components/iaqualink/config_flow.py

53 lines
1.7 KiB
Python
Raw Normal View History

"""Config flow to configure zone component."""
from typing import Optional
import voluptuous as vol
from iaqualink import AqualinkClient, AqualinkLoginException
from homeassistant import config_entries
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.helpers import ConfigType
from .const import DOMAIN
@config_entries.HANDLERS.register(DOMAIN)
class AqualinkFlowHandler(config_entries.ConfigFlow):
"""Aqualink config flow."""
VERSION = 1
CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL
async def async_step_user(self, user_input: Optional[ConfigType] = None):
"""Handle a flow start."""
# Supporting a single account.
entries = self.hass.config_entries.async_entries(DOMAIN)
if entries:
return self.async_abort(reason="already_setup")
errors = {}
if user_input is not None:
username = user_input[CONF_USERNAME]
password = user_input[CONF_PASSWORD]
try:
aqualink = AqualinkClient(username, password)
await aqualink.login()
return self.async_create_entry(title=username, data=user_input)
except AqualinkLoginException:
errors["base"] = "connection_failure"
return self.async_show_form(
step_id="user",
data_schema=vol.Schema(
{vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str}
),
errors=errors,
)
async def async_step_import(self, user_input: Optional[ConfigType] = None):
"""Occurs when an entry is setup through config."""
return await self.async_step_user(user_input)