1 """Config flow for Mikrotik."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
8 import voluptuous
as vol
30 DEFAULT_DETECTION_TIME,
34 from .coordinator
import get_api
35 from .errors
import CannotConnect, LoginError
39 """Handle a Mikrotik config flow."""
46 config_entry: ConfigEntry,
47 ) -> MikrotikOptionsFlowHandler:
48 """Get the options flow for this handler."""
52 self, user_input: dict[str, Any] |
None =
None
53 ) -> ConfigFlowResult:
54 """Handle a flow initialized by the user."""
56 if user_input
is not None:
60 await self.hass.async_add_executor_job(get_api, user_input)
62 errors[
"base"] =
"cannot_connect"
64 errors[CONF_USERNAME] =
"invalid_auth"
65 errors[CONF_PASSWORD] =
"invalid_auth"
69 title=f
"{DEFAULT_NAME} ({user_input[CONF_HOST]})", data=user_input
73 data_schema=vol.Schema(
75 vol.Required(CONF_HOST): str,
76 vol.Required(CONF_USERNAME): str,
77 vol.Required(CONF_PASSWORD): str,
78 vol.Optional(CONF_PORT, default=DEFAULT_API_PORT): int,
79 vol.Optional(CONF_VERIFY_SSL, default=
False): bool,
86 self, entry_data: Mapping[str, Any]
87 ) -> ConfigFlowResult:
88 """Perform reauth upon an API authentication error."""
92 self, user_input: dict[str, str] |
None =
None
93 ) -> ConfigFlowResult:
94 """Confirm reauth dialog."""
98 if user_input
is not None:
99 user_input = {**reauth_entry.data, **user_input}
101 await self.hass.async_add_executor_job(get_api, user_input)
102 except CannotConnect:
103 errors[
"base"] =
"cannot_connect"
105 errors[CONF_PASSWORD] =
"invalid_auth"
111 description_placeholders={CONF_USERNAME: reauth_entry.data[CONF_USERNAME]},
112 step_id=
"reauth_confirm",
113 data_schema=vol.Schema(
115 vol.Required(CONF_PASSWORD): str,
123 """Handle Mikrotik options."""
126 self, user_input: dict[str, Any] |
None =
None
127 ) -> ConfigFlowResult:
128 """Manage the Mikrotik options."""
132 self, user_input: dict[str, Any] |
None =
None
133 ) -> ConfigFlowResult:
134 """Manage the device tracker options."""
135 if user_input
is not None:
150 CONF_DETECTION_TIME, DEFAULT_DETECTION_TIME
156 step_id=
"device_tracker", data_schema=vol.Schema(options)
MikrotikOptionsFlowHandler async_get_options_flow(ConfigEntry config_entry)
ConfigFlowResult async_step_reauth_confirm(self, dict[str, str]|None user_input=None)
ConfigFlowResult async_step_reauth(self, Mapping[str, Any] entry_data)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_init(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_device_tracker(self, dict[str, Any]|None user_input=None)
ConfigEntry _get_reauth_entry(self)
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_update_reload_and_abort(self, ConfigEntry entry, *str|None|UndefinedType unique_id=UNDEFINED, str|UndefinedType title=UNDEFINED, Mapping[str, Any]|UndefinedType data=UNDEFINED, Mapping[str, Any]|UndefinedType data_updates=UNDEFINED, Mapping[str, Any]|UndefinedType options=UNDEFINED, str|UndefinedType reason=UNDEFINED, bool reload_even_if_entry_is_unchanged=True)
None _async_abort_entries_match(self, dict[str, Any]|None match_dict=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)
ConfigEntry config_entry(self)
None config_entry(self, ConfigEntry value)
_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)