1 """Config flow for Radarr."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
8 from aiohttp
import ClientConnectorError
9 from aiopyarr
import exceptions
10 from aiopyarr.models.host_configuration
import PyArrHostConfiguration
11 from aiopyarr.radarr_client
import RadarrClient
12 import voluptuous
as vol
20 from .const
import DEFAULT_NAME, DEFAULT_URL, DOMAIN
24 """Handle a config flow for Radarr."""
29 self, entry_data: Mapping[str, Any]
30 ) -> ConfigFlowResult:
31 """Handle configuration by re-auth."""
35 self, user_input: dict[str, str] |
None =
None
36 ) -> ConfigFlowResult:
37 """Confirm reauth dialog."""
38 if user_input
is not None:
45 self, user_input: dict[str, Any] |
None =
None
46 ) -> ConfigFlowResult:
47 """Handle a flow initiated by the user."""
50 if user_input
is not None:
54 url =
URL(user_input[CONF_URL])
55 user_input[CONF_URL] = f
"{url.scheme}://{url.host}:{url.port}{url.path}"
59 user_input[CONF_API_KEY] = result[1]
60 except exceptions.ArrAuthenticationException:
61 errors = {
"base":
"invalid_auth"}
62 except (ClientConnectorError, exceptions.ArrConnectionException):
63 errors = {
"base":
"cannot_connect"}
64 except exceptions.ArrWrongAppException:
65 errors = {
"base":
"wrong_app"}
66 except exceptions.ArrZeroConfException:
67 errors = {
"base":
"zeroconf_failed"}
68 except exceptions.ArrException:
69 errors = {
"base":
"unknown"}
81 if user_input
is None:
88 data_schema=vol.Schema(
91 CONF_URL, default=user_input.get(CONF_URL, DEFAULT_URL)
93 vol.Optional(CONF_API_KEY): str,
96 default=user_input.get(CONF_VERIFY_SSL,
False),
105 hass: HomeAssistant, data: dict[str, Any]
106 ) -> tuple[str, str, str] |
None:
107 """Validate the user input allows us to connect."""
108 host_configuration = PyArrHostConfiguration(
109 api_token=data.get(CONF_API_KEY,
""),
110 verify_ssl=data[CONF_VERIFY_SSL],
113 radarr = RadarrClient(
114 host_configuration=host_configuration,
117 if CONF_API_KEY
not in data:
118 return await radarr.async_try_zeroconf()
119 await radarr.async_get_system_status()
ConfigFlowResult async_step_reauth_confirm(self, dict[str, str]|None user_input=None)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_reauth(self, Mapping[str, Any] entry_data)
ConfigEntry _get_reauth_entry(self)
None _set_confirm_only(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)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=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)
tuple[str, str, str]|None validate_input(HomeAssistant hass, dict[str, Any] data)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)