1 """Config flow for Ridwell integration."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
6 from typing
import TYPE_CHECKING, Any
8 from aioridwell
import async_get_client
9 from aioridwell.errors
import InvalidCredentialsError, RidwellError
10 import voluptuous
as vol
16 from .const
import DOMAIN, LOGGER
18 STEP_REAUTH_CONFIRM_DATA_SCHEMA = vol.Schema(
20 vol.Required(CONF_PASSWORD): cv.string,
24 STEP_USER_DATA_SCHEMA = vol.Schema(
26 vol.Required(CONF_USERNAME): cv.string,
27 vol.Required(CONF_PASSWORD): cv.string,
33 """Handle a config flow for Ridwell."""
39 self.
_password_password: str |
None =
None
40 self.
_username_username: str |
None =
None
43 self, error_step_id: str, error_schema: vol.Schema
44 ) -> ConfigFlowResult:
45 """Validate input credentials and proceed accordingly."""
47 session = aiohttp_client.async_get_clientsession(self.hass)
54 await async_get_client(self.
_username_username, self.
_password_password, session=session)
55 except InvalidCredentialsError:
56 errors[
"base"] =
"invalid_auth"
57 except RidwellError
as err:
58 LOGGER.error(
"Unknown Ridwell error: %s", err)
59 errors[
"base"] =
"unknown"
63 step_id=error_step_id,
64 data_schema=error_schema,
66 description_placeholders={CONF_USERNAME: self.
_username_username},
70 self.hass.config_entries.async_update_entry(
72 data={**existing_entry.data, CONF_PASSWORD: self.
_password_password},
74 self.hass.async_create_task(
75 self.hass.config_entries.async_reload(existing_entry.entry_id)
85 self, entry_data: Mapping[str, Any]
86 ) -> ConfigFlowResult:
87 """Handle configuration by re-auth."""
92 self, user_input: dict[str, Any] |
None =
None
93 ) -> ConfigFlowResult:
94 """Handle re-auth completion."""
100 step_id=
"reauth_confirm",
101 data_schema=STEP_REAUTH_CONFIRM_DATA_SCHEMA,
102 description_placeholders={CONF_USERNAME: self.
_username_username},
108 "reauth_confirm", STEP_REAUTH_CONFIRM_DATA_SCHEMA
112 self, user_input: dict[str, Any] |
None =
None
113 ) -> ConfigFlowResult:
114 """Handle the initial step."""
117 step_id=
"user", data_schema=STEP_USER_DATA_SCHEMA
123 self.
_username_username = user_input[CONF_USERNAME]
124 self.
_password_password = user_input[CONF_PASSWORD]
126 return await self.
_async_validate_async_validate(
"user", STEP_USER_DATA_SCHEMA)
ConfigFlowResult async_step_reauth(self, Mapping[str, Any] entry_data)
ConfigFlowResult _async_validate(self, str error_step_id, vol.Schema error_schema)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_reauth_confirm(self, dict[str, Any]|None user_input=None)
None _abort_if_unique_id_configured(self, dict[str, Any]|None updates=None, bool reload_on_update=True, *str error="already_configured")
ConfigEntry|None async_set_unique_id(self, str|None unique_id=None, *bool raise_on_progress=True)
ConfigFlowResult async_create_entry(self, *str title, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None, Mapping[str, Any]|None options=None)
ConfigFlowResult async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)
ConfigFlowResult async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_create_entry(self, *str|None title=None, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None)
_FlowResultT async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)