From 4d85f78b32d4f30d1639541c61a9fb7de9466bd6 Mon Sep 17 00:00:00 2001 From: Jan-Philipp Benecke Date: Mon, 22 Jan 2024 18:20:20 +0100 Subject: [PATCH] Cleanup Discovergy config flow (#108381) * Cleanup Discovergy config flow * Make use of the helper function --- .../components/discovergy/config_flow.py | 61 +++++++++++-------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/homeassistant/components/discovergy/config_flow.py b/homeassistant/components/discovergy/config_flow.py index 38a250a381d..d0e0c272d24 100644 --- a/homeassistant/components/discovergy/config_flow.py +++ b/homeassistant/components/discovergy/config_flow.py @@ -15,26 +15,37 @@ from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_EMAIL, CONF_PASSWORD from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.httpx_client import get_async_client +from homeassistant.helpers.selector import ( + TextSelector, + TextSelectorConfig, + TextSelectorType, +) from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -def make_schema(email: str = "", password: str = "") -> vol.Schema: - """Create schema for config flow.""" - return vol.Schema( - { - vol.Required( - CONF_EMAIL, - default=email, - ): str, - vol.Required( - CONF_PASSWORD, - default=password, - ): str, - } - ) +CONFIG_SCHEMA = vol.Schema( + { + vol.Required( + CONF_EMAIL, + ): TextSelector( + TextSelectorConfig( + type=TextSelectorType.EMAIL, + autocomplete="email", + ) + ), + vol.Required( + CONF_PASSWORD, + ): TextSelector( + TextSelectorConfig( + type=TextSelectorType.PASSWORD, + autocomplete="current-password", + ) + ), + } +) class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @@ -42,7 +53,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): VERSION = 1 - existing_entry: ConfigEntry | None = None + _existing_entry: ConfigEntry | None = None async def async_step_user( self, user_input: dict[str, Any] | None = None @@ -51,15 +62,14 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if user_input is None: return self.async_show_form( step_id="user", - data_schema=make_schema(), + data_schema=CONFIG_SCHEMA, ) return await self._validate_and_save(user_input) async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: """Handle the initial step.""" - self.existing_entry = await self.async_set_unique_id(self.context["unique_id"]) - + self._existing_entry = await self.async_set_unique_id(self.context["unique_id"]) return await self._validate_and_save(entry_data, step_id="reauth") async def _validate_and_save( @@ -84,18 +94,14 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): _LOGGER.exception("Unexpected error occurred while getting meters") errors["base"] = "unknown" else: - if self.existing_entry: - self.hass.config_entries.async_update_entry( - self.existing_entry, + if self._existing_entry: + return self.async_update_reload_and_abort( + entry=self._existing_entry, data={ CONF_EMAIL: user_input[CONF_EMAIL], CONF_PASSWORD: user_input[CONF_PASSWORD], }, ) - await self.hass.config_entries.async_reload( - self.existing_entry.entry_id - ) - return self.async_abort(reason="reauth_successful") # set unique id to title which is the account email await self.async_set_unique_id(user_input[CONF_EMAIL].lower()) @@ -107,6 +113,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_show_form( step_id=step_id, - data_schema=make_schema(), + data_schema=self.add_suggested_values_to_schema( + CONFIG_SCHEMA, + self._existing_entry.data if self._existing_entry else user_input, + ), errors=errors, )