Add typing to Venstar Config flow (#99016)

This commit is contained in:
Joost Lekkerkerker 2023-08-27 16:03:36 +02:00 committed by GitHub
parent c087e6eab6
commit a73f214ead
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,10 @@
"""Config flow to configure the Venstar integration.""" """Config flow to configure the Venstar integration."""
from typing import Any
from venstarcolortouch import VenstarColorTouch from venstarcolortouch import VenstarColorTouch
import voluptuous as vol import voluptuous as vol
from homeassistant import config_entries, core, exceptions from homeassistant.config_entries import ConfigFlow
from homeassistant.const import ( from homeassistant.const import (
CONF_HOST, CONF_HOST,
CONF_PASSWORD, CONF_PASSWORD,
@ -10,21 +12,15 @@ from homeassistant.const import (
CONF_SSL, CONF_SSL,
CONF_USERNAME, CONF_USERNAME,
) )
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResult
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.typing import ConfigType
from .const import _LOGGER, DOMAIN, VENSTAR_TIMEOUT from .const import _LOGGER, DOMAIN, VENSTAR_TIMEOUT
DATA_SCHEMA = vol.Schema(
{
vol.Required(CONF_HOST): str,
vol.Optional(CONF_USERNAME): str,
vol.Optional(CONF_PASSWORD): str,
vol.Optional(CONF_PIN): str,
vol.Optional(CONF_SSL, default=False): bool,
}
)
async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> str:
async def validate_input(hass: core.HomeAssistant, data):
"""Validate the user input allows us to connect.""" """Validate the user input allows us to connect."""
username = data.get(CONF_USERNAME) username = data.get(CONF_USERNAME)
password = data.get(CONF_PASSWORD) password = data.get(CONF_PASSWORD)
@ -48,37 +44,48 @@ async def validate_input(hass: core.HomeAssistant, data):
if not info_success: if not info_success:
raise CannotConnect raise CannotConnect
return {"title": client.name} return client.name
class VenstarConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): class VenstarConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle a venstar config flow.""" """Handle a venstar config flow."""
VERSION = 1 VERSION = 1
async def async_step_user(self, user_input=None): async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Create config entry. Show the setup form to the user.""" """Create config entry. Show the setup form to the user."""
errors = {} errors = {}
info = {}
if user_input is not None: if user_input is not None:
self._async_abort_entries_match({CONF_HOST: user_input[CONF_HOST]}) self._async_abort_entries_match({CONF_HOST: user_input[CONF_HOST]})
try: try:
info = await validate_input(self.hass, user_input) title = await validate_input(self.hass, user_input)
except CannotConnect: except CannotConnect:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception") _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
return self.async_create_entry(title=info["title"], data=user_input) return self.async_create_entry(title=title, data=user_input)
return self.async_show_form( return self.async_show_form(
step_id="user", data_schema=DATA_SCHEMA, errors=errors step_id="user",
data_schema=vol.Schema(
{
vol.Required(CONF_HOST): str,
vol.Optional(CONF_USERNAME): str,
vol.Optional(CONF_PASSWORD): str,
vol.Optional(CONF_PIN): str,
vol.Optional(CONF_SSL, default=False): bool,
}
),
errors=errors,
) )
async def async_step_import(self, import_data): async def async_step_import(self, import_data: ConfigType) -> FlowResult:
"""Import entry from configuration.yaml.""" """Import entry from configuration.yaml."""
self._async_abort_entries_match({CONF_HOST: import_data[CONF_HOST]}) self._async_abort_entries_match({CONF_HOST: import_data[CONF_HOST]})
return await self.async_step_user( return await self.async_step_user(
@ -92,5 +99,5 @@ class VenstarConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
) )
class CannotConnect(exceptions.HomeAssistantError): class CannotConnect(HomeAssistantError):
"""Error to indicate we cannot connect.""" """Error to indicate we cannot connect."""