From b0ed8c49615597b97dab24a08f9beed789741e4d Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 29 Feb 2024 22:16:14 +0100 Subject: [PATCH] Migrate integrations s-t to generic flowhandler (#111865) --- .../components/sabnzbd/config_flow.py | 7 ++- .../components/samsungtv/config_flow.py | 51 +++++++++++-------- .../components/schlage/config_flow.py | 18 +++---- .../components/screenlogic/config_flow.py | 28 ++++++---- .../components/season/config_flow.py | 5 +- homeassistant/components/sense/config_flow.py | 9 ++-- .../components/sensibo/config_flow.py | 15 +++--- .../components/sensirion_ble/config_flow.py | 9 ++-- .../components/sensorpro/config_flow.py | 9 ++-- .../components/sensorpush/config_flow.py | 9 ++-- .../components/sentry/config_flow.py | 20 +++++--- .../components/sfr_box/config_flow.py | 15 +++--- .../components/sharkiq/config_flow.py | 21 ++++---- .../components/shelly/config_flow.py | 24 +++++---- .../components/shopping_list/config_flow.py | 7 ++- homeassistant/components/sia/config_flow.py | 26 ++++++---- .../components/simplepush/config_flow.py | 7 ++- .../components/simplisafe/config_flow.py | 19 ++++--- .../components/skybell/config_flow.py | 13 ++--- homeassistant/components/slack/config_flow.py | 7 ++- .../components/sleepiq/config_flow.py | 15 +++--- .../components/slimproto/config_flow.py | 5 +- homeassistant/components/sma/config_flow.py | 12 ++--- .../components/smappee/config_flow.py | 4 +- .../smart_meter_texas/config_flow.py | 12 +++-- .../components/smartthings/config_flow.py | 4 +- .../components/smarttub/config_flow.py | 11 ++-- homeassistant/components/smhi/config_flow.py | 7 ++- homeassistant/components/sms/config_flow.py | 10 ++-- .../components/snapcast/config_flow.py | 5 +- homeassistant/components/snooz/config_flow.py | 17 +++---- .../components/solaredge/config_flow.py | 7 ++- .../components/solarlog/config_flow.py | 4 +- homeassistant/components/solax/config_flow.py | 7 ++- homeassistant/components/soma/config_flow.py | 4 +- .../components/somfy_mylink/config_flow.py | 32 +++++++----- .../components/sonarr/config_flow.py | 22 +++++--- .../components/songpal/config_flow.py | 9 ++-- homeassistant/components/sonos/config_flow.py | 4 +- .../components/soundtouch/config_flow.py | 7 ++- .../components/speedtestdotnet/config_flow.py | 20 +++++--- .../components/spider/config_flow.py | 4 +- .../components/spotify/config_flow.py | 11 ++-- homeassistant/components/sql/config_flow.py | 18 ++++--- .../components/squeezebox/config_flow.py | 9 ++-- .../components/srp_energy/config_flow.py | 9 ++-- .../components/starline/config_flow.py | 13 ++--- .../components/starlink/config_flow.py | 5 +- .../components/steam_online/config_flow.py | 33 +++++++----- .../components/steamist/config_flow.py | 21 ++++---- .../components/stookalert/config_flow.py | 5 +- .../components/stookwijzer/config_flow.py | 5 +- .../components/streamlabswater/config_flow.py | 7 ++- .../components/subaru/config_flow.py | 26 ++++++---- .../components/suez_water/config_flow.py | 7 ++- homeassistant/components/sun/config_flow.py | 7 ++- .../components/sunweg/config_flow.py | 11 ++-- .../components/surepetcare/config_flow.py | 13 ++--- .../swiss_public_transport/config_flow.py | 9 ++-- .../components/switchbee/config_flow.py | 7 ++- .../components/switchbot/config_flow.py | 27 ++++++---- .../components/switchbot_cloud/config_flow.py | 7 ++- .../components/switcher_kis/config_flow.py | 13 ++--- .../components/syncthing/config_flow.py | 12 +++-- .../components/syncthru/config_flow.py | 9 ++-- .../components/synology_dsm/config_flow.py | 38 ++++++++------ .../components/system_bridge/config_flow.py | 22 ++++---- .../components/systemmonitor/config_flow.py | 6 ++- homeassistant/components/tado/config_flow.py | 41 ++++++++------- .../components/tailscale/config_flow.py | 11 ++-- .../components/tailwind/config_flow.py | 22 ++++---- homeassistant/components/tami4/config_flow.py | 9 ++-- .../components/tankerkoenig/config_flow.py | 34 ++++++++----- .../components/tasmota/config_flow.py | 15 +++--- .../components/tautulli/config_flow.py | 11 ++-- .../components/technove/config_flow.py | 9 ++-- homeassistant/components/tedee/config_flow.py | 11 ++-- .../components/tellduslive/config_flow.py | 4 +- .../tesla_wall_connector/config_flow.py | 11 ++-- .../components/teslemetry/config_flow.py | 3 +- .../components/tessie/config_flow.py | 14 ++--- .../components/thermobeacon/config_flow.py | 9 ++-- .../components/thermopro/config_flow.py | 9 ++-- .../components/thread/config_flow.py | 11 ++-- .../components/tibber/config_flow.py | 7 ++- homeassistant/components/tile/config_flow.py | 19 ++++--- .../components/tilt_ble/config_flow.py | 9 ++-- .../components/todoist/config_flow.py | 7 ++- homeassistant/components/tolo/config_flow.py | 11 ++-- .../components/tomorrowio/config_flow.py | 22 ++++---- homeassistant/components/toon/config_flow.py | 10 ++-- .../components/totalconnect/config_flow.py | 20 +++++--- .../components/tplink/config_flow.py | 40 +++++++++------ .../components/tplink_omada/config_flow.py | 15 +++--- .../components/traccar_server/config_flow.py | 7 +-- .../components/tractive/config_flow.py | 13 ++--- .../components/tradfri/config_flow.py | 13 +++-- .../trafikverket_camera/config_flow.py | 17 ++++--- .../trafikverket_ferry/config_flow.py | 15 +++--- .../trafikverket_train/config_flow.py | 26 ++++++---- .../config_flow.py | 15 +++--- .../components/transmission/config_flow.py | 28 ++++++---- homeassistant/components/tuya/config_flow.py | 11 ++-- .../components/twentemilieu/config_flow.py | 7 ++- .../components/twinkly/config_flow.py | 12 ++--- .../components/twitch/config_flow.py | 14 ++--- 106 files changed, 792 insertions(+), 661 deletions(-) diff --git a/homeassistant/components/sabnzbd/config_flow.py b/homeassistant/components/sabnzbd/config_flow.py index d433b562183..f3f974eef71 100644 --- a/homeassistant/components/sabnzbd/config_flow.py +++ b/homeassistant/components/sabnzbd/config_flow.py @@ -6,7 +6,7 @@ from typing import Any import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import ( CONF_API_KEY, CONF_HOST, @@ -15,7 +15,6 @@ from homeassistant.const import ( CONF_SSL, CONF_URL, ) -from homeassistant.data_entry_flow import FlowResult from .const import DEFAULT_NAME, DOMAIN from .sab import get_client @@ -31,7 +30,7 @@ USER_SCHEMA = vol.Schema( ) -class SABnzbdConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SABnzbdConfigFlow(ConfigFlow, domain=DOMAIN): """Sabnzbd config flow.""" VERSION = 1 @@ -47,7 +46,7 @@ class SABnzbdConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} diff --git a/homeassistant/components/samsungtv/config_flow.py b/homeassistant/components/samsungtv/config_flow.py index e7f71210dfe..87c795e2952 100644 --- a/homeassistant/components/samsungtv/config_flow.py +++ b/homeassistant/components/samsungtv/config_flow.py @@ -11,8 +11,13 @@ import getmac from samsungtvws.encrypted.authenticator import SamsungTVEncryptedWSAsyncAuthenticator import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import dhcp, ssdp, zeroconf +from homeassistant.config_entries import ( + ConfigEntry, + ConfigEntryState, + ConfigFlow, + ConfigFlowResult, +) from homeassistant.const import ( CONF_HOST, CONF_MAC, @@ -23,7 +28,7 @@ from homeassistant.const import ( CONF_TOKEN, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import AbortFlow, FlowResult +from homeassistant.data_entry_flow import AbortFlow from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.device_registry import format_mac @@ -57,7 +62,7 @@ def _strip_uuid(udn: str) -> str: def _entry_is_complete( - entry: config_entries.ConfigEntry, + entry: ConfigEntry, ssdp_rendering_control_location: str | None, ssdp_main_tv_agent_location: str | None, ) -> bool: @@ -91,14 +96,14 @@ def _mac_is_same_with_incorrect_formatting( ) -class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SamsungTVConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a Samsung TV config flow.""" VERSION = 2 def __init__(self) -> None: """Initialize flow.""" - self._reauth_entry: config_entries.ConfigEntry | None = None + self._reauth_entry: ConfigEntry | None = None self._host: str = "" self._mac: str | None = None self._udn: str | None = None @@ -131,7 +136,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): CONF_SSDP_MAIN_TV_AGENT_LOCATION: self._ssdp_main_tv_agent_location, } - def _get_entry_from_bridge(self) -> FlowResult: + def _get_entry_from_bridge(self) -> ConfigFlowResult: """Get device entry.""" assert self._bridge data = self._base_config_entry() @@ -252,7 +257,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if user_input is not None: await self._async_set_name_host_from_input(user_input) @@ -270,7 +275,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_pairing( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a pairing by accepting the message on the TV.""" assert self._bridge is not None errors: dict[str, str] = {} @@ -292,7 +297,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_encrypted_pairing( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a encrypted pairing.""" assert self._host is not None await self._async_start_encrypted_pairing(self._host) @@ -326,9 +331,9 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @callback def _async_get_existing_matching_entry( self, - ) -> tuple[config_entries.ConfigEntry | None, bool]: + ) -> tuple[ConfigEntry | None, bool]: """Get first existing matching entry (prefer unique id).""" - matching_host_entry: config_entries.ConfigEntry | None = None + matching_host_entry: ConfigEntry | None = None for entry in self._async_current_entries(include_ignore=False): if (self._mac and self._mac == entry.data.get(CONF_MAC)) or ( self._upnp_udn and self._upnp_udn == entry.unique_id @@ -345,7 +350,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @callback def _async_update_existing_matching_entry( self, - ) -> config_entries.ConfigEntry | None: + ) -> ConfigEntry | None: """Check existing entries and update them. Returns the existing entry if it was updated. @@ -398,7 +403,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return None LOGGER.debug("Updating existing config entry with %s", entry_kw_args) self.hass.config_entries.async_update_entry(entry, **entry_kw_args) - if entry.state != config_entries.ConfigEntryState.LOADED: + if entry.state != ConfigEntryState.LOADED: # If its loaded it already has a reload listener in place # and we do not want to trigger multiple reloads self.hass.async_create_task( @@ -430,7 +435,9 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ): raise AbortFlow(RESULT_NOT_SUPPORTED) - async def async_step_ssdp(self, discovery_info: ssdp.SsdpServiceInfo) -> FlowResult: + async def async_step_ssdp( + self, discovery_info: ssdp.SsdpServiceInfo + ) -> ConfigFlowResult: """Handle a flow initialized by ssdp discovery.""" LOGGER.debug("Samsung device found via SSDP: %s", discovery_info) model_name: str = discovery_info.upnp.get(ssdp.ATTR_UPNP_MODEL_NAME) or "" @@ -475,7 +482,9 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.context["title_placeholders"] = {"device": self._title} return await self.async_step_confirm() - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle a flow initialized by dhcp discovery.""" LOGGER.debug("Samsung device found via DHCP: %s", discovery_info) self._mac = format_mac(discovery_info.macaddress) @@ -487,7 +496,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by zeroconf discovery.""" LOGGER.debug("Samsung device found via ZEROCONF: %s", discovery_info) self._mac = format_mac(discovery_info.properties["deviceid"]) @@ -499,7 +508,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle user-confirmation of discovered node.""" if user_input is not None: await self._async_create_bridge() @@ -512,7 +521,9 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="confirm", description_placeholders={"device": self._title} ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self._reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -525,7 +536,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth.""" errors = {} assert self._reauth_entry @@ -569,7 +580,7 @@ class SamsungTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm_encrypted( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth (encrypted method).""" errors = {} assert self._reauth_entry diff --git a/homeassistant/components/schlage/config_flow.py b/homeassistant/components/schlage/config_flow.py index 84bc3ef8ef6..80693013af7 100644 --- a/homeassistant/components/schlage/config_flow.py +++ b/homeassistant/components/schlage/config_flow.py @@ -8,10 +8,8 @@ import pyschlage from pyschlage.exceptions import NotAuthorizedError import voluptuous as vol -from homeassistant import config_entries -from homeassistant.config_entries import ConfigEntry +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN, LOGGER @@ -21,7 +19,7 @@ STEP_USER_DATA_SCHEMA = vol.Schema( STEP_REAUTH_DATA_SCHEMA = vol.Schema({vol.Required(CONF_PASSWORD): str}) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SchlageConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Schlage.""" VERSION = 1 @@ -30,7 +28,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if user_input is None: return self._show_user_form({}) @@ -45,13 +43,15 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): await self.async_set_unique_id(user_id) return self.async_create_entry(title=username, data=user_input) - def _show_user_form(self, errors: dict[str, str]) -> FlowResult: + def _show_user_form(self, errors: dict[str, str]) -> ConfigFlowResult: """Show the user form.""" return self.async_show_form( step_id="user", data_schema=STEP_USER_DATA_SCHEMA, errors=errors ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle reauth upon an API authentication error.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -60,7 +60,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" assert self.reauth_entry is not None if user_input is None: @@ -85,7 +85,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): await self.hass.config_entries.async_reload(self.reauth_entry.entry_id) return self.async_abort(reason="reauth_successful") - def _show_reauth_form(self, errors: dict[str, str]) -> FlowResult: + def _show_reauth_form(self, errors: dict[str, str]) -> ConfigFlowResult: """Show the reauth form.""" return self.async_show_form( step_id="reauth_confirm", diff --git a/homeassistant/components/screenlogic/config_flow.py b/homeassistant/components/screenlogic/config_flow.py index 25d00e3a2ce..424bddb5c8c 100644 --- a/homeassistant/components/screenlogic/config_flow.py +++ b/homeassistant/components/screenlogic/config_flow.py @@ -9,11 +9,15 @@ from screenlogicpy.const.common import SL_GATEWAY_IP, SL_GATEWAY_NAME, SL_GATEWA from screenlogicpy.requests import login import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import dhcp +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_IP_ADDRESS, CONF_PORT, CONF_SCAN_INTERVAL from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult import homeassistant.helpers.config_validation as cv from homeassistant.helpers.device_registry import format_mac @@ -60,7 +64,7 @@ def name_for_mac(mac): return f"Pentair: {short_mac(mac)}" -class ScreenlogicConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class ScreenlogicConfigFlow(ConfigFlow, domain=DOMAIN): """Config flow to setup screen logic devices.""" VERSION = 1 @@ -73,17 +77,19 @@ class ScreenlogicConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> ScreenLogicOptionsFlowHandler: """Get the options flow for ScreenLogic.""" return ScreenLogicOptionsFlowHandler(config_entry) - async def async_step_user(self, user_input=None) -> FlowResult: + async def async_step_user(self, user_input=None) -> ConfigFlowResult: """Handle the start of the config flow.""" self.discovered_gateways = await async_discover_gateways_by_unique_id(self.hass) return await self.async_step_gateway_select() - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle dhcp discovery.""" mac = format_mac(discovery_info.macaddress) await self.async_set_unique_id(mac) @@ -94,7 +100,7 @@ class ScreenlogicConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.context["title_placeholders"] = {"name": discovery_info.hostname} return await self.async_step_gateway_entry() - async def async_step_gateway_select(self, user_input=None) -> FlowResult: + async def async_step_gateway_select(self, user_input=None) -> ConfigFlowResult: """Handle the selection of a discovered ScreenLogic gateway.""" existing = self._async_current_ids() unconfigured_gateways = { @@ -141,7 +147,7 @@ class ScreenlogicConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): description_placeholders={}, ) - async def async_step_gateway_entry(self, user_input=None) -> FlowResult: + async def async_step_gateway_entry(self, user_input=None) -> ConfigFlowResult: """Handle the manual entry of a ScreenLogic gateway.""" errors: dict[str, str] = {} ip_address = self.discovered_ip @@ -180,14 +186,14 @@ class ScreenlogicConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class ScreenLogicOptionsFlowHandler(config_entries.OptionsFlow): +class ScreenLogicOptionsFlowHandler(OptionsFlow): """Handles the options for the ScreenLogic integration.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Init the screen logic options flow.""" self.config_entry = config_entry - async def async_step_init(self, user_input=None) -> FlowResult: + async def async_step_init(self, user_input=None) -> ConfigFlowResult: """Manage the options.""" if user_input is not None: return self.async_create_entry( diff --git a/homeassistant/components/season/config_flow.py b/homeassistant/components/season/config_flow.py index 069037e53a0..6c461404781 100644 --- a/homeassistant/components/season/config_flow.py +++ b/homeassistant/components/season/config_flow.py @@ -5,9 +5,8 @@ from typing import Any import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_TYPE -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.selector import ( SelectSelector, SelectSelectorConfig, @@ -24,7 +23,7 @@ class SeasonConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if user_input is not None: await self.async_set_unique_id(user_input[CONF_TYPE]) diff --git a/homeassistant/components/sense/config_flow.py b/homeassistant/components/sense/config_flow.py index 86b68db1e32..ddf28fb1cef 100644 --- a/homeassistant/components/sense/config_flow.py +++ b/homeassistant/components/sense/config_flow.py @@ -10,9 +10,8 @@ from sense_energy import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_CODE, CONF_EMAIL, CONF_PASSWORD, CONF_TIMEOUT -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import ACTIVE_UPDATE_RATE, DEFAULT_TIMEOUT, DOMAIN, SENSE_CONNECT_EXCEPTIONS @@ -28,7 +27,7 @@ DATA_SCHEMA = vol.Schema( ) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SenseConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Sense.""" VERSION = 1 @@ -121,7 +120,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=DATA_SCHEMA, errors=errors ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self._auth_data = dict(entry_data) return await self.async_step_reauth_validate(entry_data) diff --git a/homeassistant/components/sensibo/config_flow.py b/homeassistant/components/sensibo/config_flow.py index d826e854fa0..75d41b80d8a 100644 --- a/homeassistant/components/sensibo/config_flow.py +++ b/homeassistant/components/sensibo/config_flow.py @@ -7,9 +7,8 @@ from typing import Any from pysensibo.exceptions import AuthenticationError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.selector import TextSelector from .const import DEFAULT_NAME, DOMAIN @@ -22,14 +21,16 @@ DATA_SCHEMA = vol.Schema( ) -class SensiboConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SensiboConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Sensibo integration.""" VERSION = 2 - entry: config_entries.ConfigEntry | None + entry: ConfigEntry | None - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-authentication with Sensibo.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -37,7 +38,7 @@ class SensiboConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm re-authentication with Sensibo.""" errors: dict[str, str] = {} @@ -74,7 +75,7 @@ class SensiboConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/sensirion_ble/config_flow.py b/homeassistant/components/sensirion_ble/config_flow.py index 0442b6d16c3..dabe4e323ed 100644 --- a/homeassistant/components/sensirion_ble/config_flow.py +++ b/homeassistant/components/sensirion_ble/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class SensirionConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class SensirionConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class SensirionConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/sensorpro/config_flow.py b/homeassistant/components/sensorpro/config_flow.py index 182a35880ab..c5899291f7c 100644 --- a/homeassistant/components/sensorpro/config_flow.py +++ b/homeassistant/components/sensorpro/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class SensorProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class SensorProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class SensorProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/sensorpush/config_flow.py b/homeassistant/components/sensorpush/config_flow.py index 9913b7f7b09..5fd29776c32 100644 --- a/homeassistant/components/sensorpush/config_flow.py +++ b/homeassistant/components/sensorpush/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class SensorPushConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class SensorPushConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class SensorPushConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/sentry/config_flow.py b/homeassistant/components/sentry/config_flow.py index 4fe2b0cc503..10d17030d9f 100644 --- a/homeassistant/components/sentry/config_flow.py +++ b/homeassistant/components/sentry/config_flow.py @@ -7,9 +7,13 @@ from typing import Any from sentry_sdk.utils import BadDsn, Dsn import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from .const import ( CONF_DSN, @@ -33,7 +37,7 @@ _LOGGER = logging.getLogger(__name__) DATA_SCHEMA = vol.Schema({vol.Required(CONF_DSN): str}) -class SentryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SentryConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a Sentry config flow.""" VERSION = 1 @@ -41,14 +45,14 @@ class SentryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> SentryOptionsFlow: """Get the options flow for this handler.""" return SentryOptionsFlow(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a user config flow.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -70,16 +74,16 @@ class SentryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class SentryOptionsFlow(config_entries.OptionsFlow): +class SentryOptionsFlow(OptionsFlow): """Handle Sentry options.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize Sentry options flow.""" self.config_entry = config_entry async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage Sentry options.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) diff --git a/homeassistant/components/sfr_box/config_flow.py b/homeassistant/components/sfr_box/config_flow.py index 836ed708743..aa8e48f9422 100644 --- a/homeassistant/components/sfr_box/config_flow.py +++ b/homeassistant/components/sfr_box/config_flow.py @@ -8,9 +8,8 @@ from sfrbox_api.bridge import SFRBox from sfrbox_api.exceptions import SFRBoxAuthenticationError, SFRBoxError import voluptuous as vol -from homeassistant.config_entries import ConfigEntry, ConfigFlow +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import selector from homeassistant.helpers.httpx_client import get_async_client @@ -41,7 +40,7 @@ class SFRBoxFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} if user_input is not None: @@ -65,7 +64,7 @@ class SFRBoxFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_choose_auth( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" return self.async_show_menu( step_id="choose_auth", @@ -74,7 +73,7 @@ class SFRBoxFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_auth( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Check authentication.""" errors = {} if user_input is not None: @@ -107,11 +106,13 @@ class SFRBoxFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_skip_auth( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Skip authentication.""" return self.async_create_entry(title="SFR Box", data=self._config) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle failed credentials.""" self._reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] diff --git a/homeassistant/components/sharkiq/config_flow.py b/homeassistant/components/sharkiq/config_flow.py index c0ca5e1b9e5..8bbad1f7c68 100644 --- a/homeassistant/components/sharkiq/config_flow.py +++ b/homeassistant/components/sharkiq/config_flow.py @@ -9,9 +9,10 @@ import aiohttp from sharkiq import SharkIqAuthError, get_ayla_api import voluptuous as vol -from homeassistant import config_entries, core, exceptions +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_REGION, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import selector from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -39,7 +40,7 @@ SHARKIQ_SCHEMA = vol.Schema( async def _validate_input( - hass: core.HomeAssistant, data: Mapping[str, Any] + hass: HomeAssistant, data: Mapping[str, Any] ) -> dict[str, str]: """Validate the user input allows us to connect.""" ayla_api = get_ayla_api( @@ -74,7 +75,7 @@ async def _validate_input( return {"title": data[CONF_USERNAME]} -class SharkIqConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SharkIqConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Shark IQ.""" VERSION = 1 @@ -99,7 +100,7 @@ class SharkIqConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: @@ -113,7 +114,9 @@ class SharkIqConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=SHARKIQ_SCHEMA, errors=errors ) - async def async_step_reauth(self, user_input: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, user_input: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-auth if login is invalid.""" errors: dict[str, str] = {} @@ -136,13 +139,13 @@ class SharkIqConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" -class UnknownAuth(exceptions.HomeAssistantError): +class UnknownAuth(HomeAssistantError): """Error to indicate there is an uncaught auth error.""" diff --git a/homeassistant/components/shelly/config_flow.py b/homeassistant/components/shelly/config_flow.py index 2ae5a74bb42..21d8c58f0fe 100644 --- a/homeassistant/components/shelly/config_flow.py +++ b/homeassistant/components/shelly/config_flow.py @@ -16,10 +16,14 @@ from aioshelly.rpc_device import RpcDevice import voluptuous as vol from homeassistant.components.zeroconf import ZeroconfServiceInfo -from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.selector import SelectSelector, SelectSelectorConfig @@ -117,7 +121,7 @@ class ShellyConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: @@ -166,7 +170,7 @@ class ShellyConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_credentials( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the credentials step.""" errors: dict[str, str] = {} if user_input is not None: @@ -239,7 +243,7 @@ class ShellyConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle zeroconf discovery.""" host = discovery_info.host # First try to get the mac address from the name @@ -280,7 +284,7 @@ class ShellyConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_confirm_discovery( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle discovery confirm.""" errors: dict[str, str] = {} @@ -310,14 +314,16 @@ class ShellyConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" errors: dict[str, str] = {} assert self.entry is not None @@ -384,7 +390,7 @@ class OptionsFlowHandler(OptionsFlow): async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle options flow.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) diff --git a/homeassistant/components/shopping_list/config_flow.py b/homeassistant/components/shopping_list/config_flow.py index 0637dcea390..24d4ca92ebc 100644 --- a/homeassistant/components/shopping_list/config_flow.py +++ b/homeassistant/components/shopping_list/config_flow.py @@ -3,8 +3,7 @@ from __future__ import annotations from typing import Any -from homeassistant.config_entries import ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import DOMAIN @@ -16,7 +15,7 @@ class ShoppingListFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" # Check if already configured await self.async_set_unique_id(DOMAIN) @@ -31,6 +30,6 @@ class ShoppingListFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_onboarding( self, _: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by onboarding.""" return await self.async_step_user(user_input={}) diff --git a/homeassistant/components/sia/config_flow.py b/homeassistant/components/sia/config_flow.py index cbcb60a4565..8ebe89c24ea 100644 --- a/homeassistant/components/sia/config_flow.py +++ b/homeassistant/components/sia/config_flow.py @@ -15,10 +15,14 @@ from pysiaalarm import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_PORT, CONF_PROTOCOL from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from .const import ( CONF_ACCOUNT, @@ -87,7 +91,7 @@ def validate_zones(data: dict[str, Any]) -> dict[str, str] | None: return None -class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SIAConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for sia.""" VERSION: int = 1 @@ -95,7 +99,7 @@ class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> SIAOptionsFlowHandler: """Get the options flow for this handler.""" return SIAOptionsFlowHandler(config_entry) @@ -107,7 +111,7 @@ class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial user step.""" errors: dict[str, str] | None = None if user_input is not None: @@ -120,7 +124,7 @@ class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_add_account( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the additional accounts steps.""" errors: dict[str, str] | None = None if user_input is not None: @@ -133,7 +137,7 @@ class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_handle_data_and_route( self, user_input: dict[str, Any] - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user_input, check if configured and route to the right next step or create entry.""" self._update_data(user_input) @@ -171,10 +175,10 @@ class SIAConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self._options[CONF_ACCOUNTS][account][CONF_ZONES] = user_input[CONF_ZONES] -class SIAOptionsFlowHandler(config_entries.OptionsFlow): +class SIAOptionsFlowHandler(OptionsFlow): """Handle SIA options.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize SIA options flow.""" self.config_entry = config_entry self.options = deepcopy(dict(config_entry.options)) @@ -183,7 +187,7 @@ class SIAOptionsFlowHandler(config_entries.OptionsFlow): async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the SIA options.""" self.hub = self.hass.data[DOMAIN][self.config_entry.entry_id] assert self.hub is not None @@ -193,7 +197,7 @@ class SIAOptionsFlowHandler(config_entries.OptionsFlow): async def async_step_options( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Create the options step for a account.""" errors: dict[str, str] | None = None if user_input is not None: diff --git a/homeassistant/components/simplepush/config_flow.py b/homeassistant/components/simplepush/config_flow.py index d87f6fa1913..2b039a33951 100644 --- a/homeassistant/components/simplepush/config_flow.py +++ b/homeassistant/components/simplepush/config_flow.py @@ -6,9 +6,8 @@ from typing import Any from simplepush import UnknownError, send import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_NAME, CONF_PASSWORD -from homeassistant.data_entry_flow import FlowResult from .const import ATTR_ENCRYPTED, CONF_DEVICE_KEY, CONF_SALT, DEFAULT_NAME, DOMAIN @@ -36,12 +35,12 @@ def validate_input(entry: dict[str, str]) -> dict[str, str] | None: return None -class SimplePushFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SimplePushFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for simplepush.""" async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors: dict[str, str] | None = None if user_input is not None: diff --git a/homeassistant/components/simplisafe/config_flow.py b/homeassistant/components/simplisafe/config_flow.py index dcfcd6cd9d3..b093e0d216f 100644 --- a/homeassistant/components/simplisafe/config_flow.py +++ b/homeassistant/components/simplisafe/config_flow.py @@ -13,11 +13,14 @@ from simplipy.util.auth import ( ) import voluptuous as vol -from homeassistant import config_entries -from homeassistant.config_entries import ConfigEntry +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_CODE, CONF_TOKEN, CONF_URL, CONF_USERNAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client, config_validation as cv from .const import DOMAIN, LOGGER @@ -47,7 +50,7 @@ def async_get_simplisafe_oauth_values() -> SimpliSafeOAuthValues: return SimpliSafeOAuthValues(auth_url, code_verifier) -class SimpliSafeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SimpliSafeFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a SimpliSafe config flow.""" VERSION = 1 @@ -65,14 +68,14 @@ class SimpliSafeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Define the config flow to handle options.""" return SimpliSafeOptionsFlowHandler(config_entry) - async def async_step_reauth(self, config: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth(self, config: Mapping[str, Any]) -> ConfigFlowResult: """Handle configuration by re-auth.""" self._reauth = True return await self.async_step_user() async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the start of the config flow.""" if user_input is None: return self.async_show_form( @@ -144,7 +147,7 @@ class SimpliSafeFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title=simplisafe_user_id, data=data) -class SimpliSafeOptionsFlowHandler(config_entries.OptionsFlow): +class SimpliSafeOptionsFlowHandler(OptionsFlow): """Handle a SimpliSafe options flow.""" def __init__(self, config_entry: ConfigEntry) -> None: @@ -153,7 +156,7 @@ class SimpliSafeOptionsFlowHandler(config_entries.OptionsFlow): async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the options.""" if user_input is not None: return self.async_create_entry(data=user_input) diff --git a/homeassistant/components/skybell/config_flow.py b/homeassistant/components/skybell/config_flow.py index 5e63ae4f929..29cd723bff0 100644 --- a/homeassistant/components/skybell/config_flow.py +++ b/homeassistant/components/skybell/config_flow.py @@ -7,27 +7,28 @@ from typing import Any from aioskybell import Skybell, exceptions import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_EMAIL, CONF_PASSWORD -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN -class SkybellFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SkybellFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for Skybell.""" reauth_email: str - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle a reauthorization flow request.""" self.reauth_email = entry_data[CONF_EMAIL] return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle user's reauth credentials.""" errors = {} if user_input: @@ -53,7 +54,7 @@ class SkybellFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} diff --git a/homeassistant/components/slack/config_flow.py b/homeassistant/components/slack/config_flow.py index 187cef057a0..10b6183a321 100644 --- a/homeassistant/components/slack/config_flow.py +++ b/homeassistant/components/slack/config_flow.py @@ -7,9 +7,8 @@ from slack import WebClient from slack.errors import SlackApiError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_ICON, CONF_NAME, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client from .const import CONF_DEFAULT_CHANNEL, DOMAIN @@ -26,12 +25,12 @@ CONFIG_SCHEMA = vol.Schema( ) -class SlackFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SlackFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for Slack.""" async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} diff --git a/homeassistant/components/sleepiq/config_flow.py b/homeassistant/components/sleepiq/config_flow.py index 77806a1f977..60559921fcb 100644 --- a/homeassistant/components/sleepiq/config_flow.py +++ b/homeassistant/components/sleepiq/config_flow.py @@ -8,10 +8,9 @@ from typing import Any from asyncsleepiq import AsyncSleepIQ, SleepIQLoginException, SleepIQTimeoutException import voluptuous as vol -from homeassistant.config_entries import ConfigEntry, ConfigFlow +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN @@ -28,7 +27,9 @@ class SleepIQFlowHandler(ConfigFlow, domain=DOMAIN): """Initialize the config flow.""" self._reauth_entry: ConfigEntry | None = None - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: + async def async_step_import( + self, import_config: dict[str, Any] + ) -> ConfigFlowResult: """Import a SleepIQ account as a config entry. This flow is triggered by 'async_setup' for configured accounts. @@ -46,7 +47,7 @@ class SleepIQFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} @@ -80,7 +81,9 @@ class SleepIQFlowHandler(ConfigFlow, domain=DOMAIN): last_step=True, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self._reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -89,7 +92,7 @@ class SleepIQFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth.""" errors: dict[str, str] = {} assert self._reauth_entry is not None diff --git a/homeassistant/components/slimproto/config_flow.py b/homeassistant/components/slimproto/config_flow.py index 7e2e96f74dc..24457493f9b 100644 --- a/homeassistant/components/slimproto/config_flow.py +++ b/homeassistant/components/slimproto/config_flow.py @@ -4,8 +4,7 @@ from __future__ import annotations from typing import Any -from homeassistant.config_entries import ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import DEFAULT_NAME, DOMAIN @@ -17,7 +16,7 @@ class SlimProtoConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") diff --git a/homeassistant/components/sma/config_flow.py b/homeassistant/components/sma/config_flow.py index 070610d6ae2..8824b4242fa 100644 --- a/homeassistant/components/sma/config_flow.py +++ b/homeassistant/components/sma/config_flow.py @@ -7,9 +7,9 @@ from typing import Any import pysma import voluptuous as vol -from homeassistant import config_entries, core +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_SSL, CONF_VERIFY_SSL -from homeassistant.data_entry_flow import FlowResult +from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -18,9 +18,7 @@ from .const import CONF_GROUP, DOMAIN, GROUPS _LOGGER = logging.getLogger(__name__) -async def validate_input( - hass: core.HomeAssistant, data: dict[str, Any] -) -> dict[str, Any]: +async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, Any]: """Validate the user input allows us to connect.""" session = async_get_clientsession(hass, verify_ssl=data[CONF_VERIFY_SSL]) @@ -37,7 +35,7 @@ async def validate_input( return device_info -class SmaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SmaConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for SMA.""" VERSION = 1 @@ -54,7 +52,7 @@ class SmaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """First step in config flow.""" errors = {} if user_input is not None: diff --git a/homeassistant/components/smappee/config_flow.py b/homeassistant/components/smappee/config_flow.py index e57071b4938..1b79d4ff622 100644 --- a/homeassistant/components/smappee/config_flow.py +++ b/homeassistant/components/smappee/config_flow.py @@ -5,8 +5,8 @@ from pysmappee import helper, mqtt import voluptuous as vol from homeassistant.components import zeroconf +from homeassistant.config_entries import ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_IP_ADDRESS -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import config_entry_oauth2_flow from . import api @@ -39,7 +39,7 @@ class SmappeeFlowHandler( async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle zeroconf discovery.""" if not discovery_info.hostname.startswith(SUPPORTED_LOCAL_DEVICES): diff --git a/homeassistant/components/smart_meter_texas/config_flow.py b/homeassistant/components/smart_meter_texas/config_flow.py index dc0e4e93eff..fef3b579414 100644 --- a/homeassistant/components/smart_meter_texas/config_flow.py +++ b/homeassistant/components/smart_meter_texas/config_flow.py @@ -9,8 +9,10 @@ from smart_meter_texas.exceptions import ( ) import voluptuous as vol -from homeassistant import config_entries, core, exceptions +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import aiohttp_client from .const import DOMAIN @@ -22,7 +24,7 @@ DATA_SCHEMA = vol.Schema( ) -async def validate_input(hass: core.HomeAssistant, data): +async def validate_input(hass: HomeAssistant, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. @@ -44,7 +46,7 @@ async def validate_input(hass: core.HomeAssistant, data): return {"title": account.username} -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SMTConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Smart Meter Texas.""" VERSION = 1 @@ -76,9 +78,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/smartthings/config_flow.py b/homeassistant/components/smartthings/config_flow.py index 5e3451dfbce..212f8add07d 100644 --- a/homeassistant/components/smartthings/config_flow.py +++ b/homeassistant/components/smartthings/config_flow.py @@ -7,7 +7,7 @@ from pysmartthings import APIResponseError, AppOAuth, SmartThings from pysmartthings.installedapp import format_install_url import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_ACCESS_TOKEN, CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -35,7 +35,7 @@ from .smartapp import ( _LOGGER = logging.getLogger(__name__) -class SmartThingsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SmartThingsFlowHandler(ConfigFlow, domain=DOMAIN): """Handle configuration of SmartThings integrations.""" VERSION = 2 diff --git a/homeassistant/components/smarttub/config_flow.py b/homeassistant/components/smarttub/config_flow.py index e1637b86d84..5d9767e5fe3 100644 --- a/homeassistant/components/smarttub/config_flow.py +++ b/homeassistant/components/smarttub/config_flow.py @@ -7,9 +7,8 @@ from typing import Any from smarttub import LoginFailed import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_EMAIL, CONF_PASSWORD -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN from .controller import SmartTubController @@ -19,7 +18,7 @@ DATA_SCHEMA = vol.Schema( ) -class SmartTubConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SmartTubConfigFlow(ConfigFlow, domain=DOMAIN): """SmartTub configuration flow.""" VERSION = 1 @@ -28,7 +27,7 @@ class SmartTubConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): """Instantiate config flow.""" super().__init__() self._reauth_input: Mapping[str, Any] | None = None - self._reauth_entry: config_entries.ConfigEntry | None = None + self._reauth_entry: ConfigEntry | None = None async def async_step_user(self, user_input=None): """Handle a flow initiated by the user.""" @@ -67,7 +66,9 @@ class SmartTubConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=DATA_SCHEMA, errors=errors ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Get new credentials if the current ones don't work anymore.""" self._reauth_input = entry_data self._reauth_entry = self.hass.config_entries.async_get_entry( diff --git a/homeassistant/components/smhi/config_flow.py b/homeassistant/components/smhi/config_flow.py index bfa38f317a9..dbb804f0c8a 100644 --- a/homeassistant/components/smhi/config_flow.py +++ b/homeassistant/components/smhi/config_flow.py @@ -6,10 +6,9 @@ from typing import Any from smhi.smhi_lib import Smhi, SmhiForecastException import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_LATITUDE, CONF_LOCATION, CONF_LONGITUDE, CONF_NAME from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client from homeassistant.helpers.selector import LocationSelector @@ -30,14 +29,14 @@ async def async_check_location( return True -class SmhiFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SmhiFlowHandler(ConfigFlow, domain=DOMAIN): """Config flow for SMHI component.""" VERSION = 2 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/sms/config_flow.py b/homeassistant/components/sms/config_flow.py index df3530764cb..7b507bac9b2 100644 --- a/homeassistant/components/sms/config_flow.py +++ b/homeassistant/components/sms/config_flow.py @@ -4,8 +4,10 @@ import logging import gammu import voluptuous as vol -from homeassistant import config_entries, core, exceptions +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_DEVICE +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import selector from .const import CONF_BAUD_SPEED, DEFAULT_BAUD_SPEED, DEFAULT_BAUD_SPEEDS, DOMAIN @@ -23,7 +25,7 @@ DATA_SCHEMA = vol.Schema( ) -async def get_imei_from_config(hass: core.HomeAssistant, data): +async def get_imei_from_config(hass: HomeAssistant, data): """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. @@ -48,7 +50,7 @@ async def get_imei_from_config(hass: core.HomeAssistant, data): return imei -class SMSFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SMSFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for SMS integration.""" VERSION = 1 @@ -81,5 +83,5 @@ class SMSFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return await self.async_step_user(user_input) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" diff --git a/homeassistant/components/snapcast/config_flow.py b/homeassistant/components/snapcast/config_flow.py index 479d1d648b8..c9f69c48ab5 100644 --- a/homeassistant/components/snapcast/config_flow.py +++ b/homeassistant/components/snapcast/config_flow.py @@ -9,9 +9,8 @@ import snapcast.control from snapcast.control.server import CONTROL_PORT import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PORT -from homeassistant.data_entry_flow import FlowResult from .const import DEFAULT_TITLE, DOMAIN @@ -28,7 +27,7 @@ SNAPCAST_SCHEMA = vol.Schema( class SnapcastConfigFlow(ConfigFlow, domain=DOMAIN): """Snapcast config flow.""" - async def async_step_user(self, user_input=None) -> FlowResult: + async def async_step_user(self, user_input=None) -> ConfigFlowResult: """Handle first step.""" errors = {} if user_input: diff --git a/homeassistant/components/snooz/config_flow.py b/homeassistant/components/snooz/config_flow.py index 7174fbc358c..be0fcbf20de 100644 --- a/homeassistant/components/snooz/config_flow.py +++ b/homeassistant/components/snooz/config_flow.py @@ -14,9 +14,8 @@ from homeassistant.components.bluetooth import ( async_discovered_service_info, async_process_advertisements, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS, CONF_NAME, CONF_TOKEN -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -45,7 +44,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -57,7 +56,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovery is not None @@ -77,7 +76,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: name = user_input[CONF_NAME] @@ -128,7 +127,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_wait_for_pairing_mode( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Wait for device to enter pairing mode.""" if not self._pairing_task: self._pairing_task = self.hass.async_create_task( @@ -153,7 +152,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_pairing_complete( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Create a configuration entry for a device that entered pairing mode.""" assert self._discovery @@ -166,7 +165,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_pairing_timeout( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Inform the user that the device never entered pairing mode.""" if user_input is not None: return await self.async_step_wait_for_pairing_mode() @@ -174,7 +173,7 @@ class SnoozConfigFlow(ConfigFlow, domain=DOMAIN): self._set_confirm_only() return self.async_show_form(step_id="pairing_timeout") - def _create_snooz_entry(self, discovery: DiscoveredSnooz) -> FlowResult: + def _create_snooz_entry(self, discovery: DiscoveredSnooz) -> ConfigFlowResult: assert discovery.device.display_name return self.async_create_entry( title=discovery.device.display_name, diff --git a/homeassistant/components/solaredge/config_flow.py b/homeassistant/components/solaredge/config_flow.py index 8bdf6a4b4aa..6c80cd2496b 100644 --- a/homeassistant/components/solaredge/config_flow.py +++ b/homeassistant/components/solaredge/config_flow.py @@ -7,16 +7,15 @@ from requests.exceptions import ConnectTimeout, HTTPError import solaredge import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_NAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.util import slugify from .const import CONF_SITE_ID, DEFAULT_NAME, DOMAIN -class SolarEdgeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SolarEdgeConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 @@ -56,7 +55,7 @@ class SolarEdgeConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Step when user initializes a integration.""" self._errors = {} if user_input is not None: diff --git a/homeassistant/components/solarlog/config_flow.py b/homeassistant/components/solarlog/config_flow.py index 86fc0607bf3..021bc24364a 100644 --- a/homeassistant/components/solarlog/config_flow.py +++ b/homeassistant/components/solarlog/config_flow.py @@ -6,7 +6,7 @@ from requests.exceptions import HTTPError, Timeout from sunwatcher.solarlog.solarlog import SolarLog import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.core import HomeAssistant, callback from homeassistant.util import slugify @@ -24,7 +24,7 @@ def solarlog_entries(hass: HomeAssistant): } -class SolarLogConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SolarLogConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for solarlog.""" VERSION = 1 diff --git a/homeassistant/components/solax/config_flow.py b/homeassistant/components/solax/config_flow.py index 2334fd0def2..8b3566e80eb 100644 --- a/homeassistant/components/solax/config_flow.py +++ b/homeassistant/components/solax/config_flow.py @@ -8,9 +8,8 @@ from solax import real_time_api from solax.discovery import DiscoveryError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_IP_ADDRESS, CONF_PASSWORD, CONF_PORT -from homeassistant.data_entry_flow import FlowResult import homeassistant.helpers.config_validation as cv from .const import DOMAIN @@ -39,12 +38,12 @@ async def validate_api(data) -> str: return response.serial_number -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SolaxConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Solax.""" async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, Any] = {} if user_input is None: diff --git a/homeassistant/components/soma/config_flow.py b/homeassistant/components/soma/config_flow.py index ca6f1fabf30..db8b75e1422 100644 --- a/homeassistant/components/soma/config_flow.py +++ b/homeassistant/components/soma/config_flow.py @@ -5,7 +5,7 @@ from api.soma_api import SomaApi from requests import RequestException import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_HOST, CONF_PORT from .const import DOMAIN @@ -15,7 +15,7 @@ _LOGGER = logging.getLogger(__name__) DEFAULT_PORT = 3000 -class SomaFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SomaFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 diff --git a/homeassistant/components/somfy_mylink/config_flow.py b/homeassistant/components/somfy_mylink/config_flow.py index e42191c1230..db8dcb85383 100644 --- a/homeassistant/components/somfy_mylink/config_flow.py +++ b/homeassistant/components/somfy_mylink/config_flow.py @@ -7,11 +7,17 @@ import logging from somfy_mylink_synergy import SomfyMyLinkSynergy import voluptuous as vol -from homeassistant import config_entries, core, exceptions from homeassistant.components import dhcp +from homeassistant.config_entries import ( + ConfigEntry, + ConfigEntryState, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_HOST, CONF_PORT -from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult +from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.device_registry import format_mac from .const import ( @@ -28,7 +34,7 @@ from .const import ( _LOGGER = logging.getLogger(__name__) -async def validate_input(hass: core.HomeAssistant, data): +async def validate_input(hass: HomeAssistant, data): """Validate the user input allows us to connect. Data has the keys from schema with values provided by the user. @@ -49,7 +55,7 @@ async def validate_input(hass: core.HomeAssistant, data): return {"title": f"MyLink {data[CONF_HOST]}"} -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SomfyConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Somfy MyLink.""" VERSION = 1 @@ -60,7 +66,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.mac = None self.ip_address = None - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle dhcp discovery.""" self._async_abort_entries_match({CONF_HOST: discovery_info.ip}) @@ -112,16 +120,16 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> OptionsFlowHandler: """Get the options flow for this handler.""" return OptionsFlowHandler(config_entry) -class OptionsFlowHandler(config_entries.OptionsFlow): +class OptionsFlowHandler(OptionsFlow): """Handle a option flow for somfy_mylink.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry self.options = deepcopy(dict(config_entry.options)) @@ -146,7 +154,7 @@ class OptionsFlowHandler(config_entries.OptionsFlow): async def async_step_init(self, user_input=None): """Handle options flow.""" - if self.config_entry.state is not config_entries.ConfigEntryState.LOADED: + if self.config_entry.state is not ConfigEntryState.LOADED: _LOGGER.error("MyLink must be connected to manage device options") return self.async_abort(reason="cannot_connect") @@ -194,9 +202,9 @@ class OptionsFlowHandler(config_entries.OptionsFlow): ) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/sonarr/config_flow.py b/homeassistant/components/sonarr/config_flow.py index 3ea386faa78..5631c3a70e0 100644 --- a/homeassistant/components/sonarr/config_flow.py +++ b/homeassistant/components/sonarr/config_flow.py @@ -11,10 +11,14 @@ from aiopyarr.sonarr_client import SonarrClient import voluptuous as vol import yarl -from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import ( @@ -63,7 +67,9 @@ class SonarrConfigFlow(ConfigFlow, domain=DOMAIN): """Get the options flow for this handler.""" return SonarrOptionsFlowHandler(config_entry) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -71,7 +77,7 @@ class SonarrConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" if user_input is None: assert self.entry is not None @@ -85,7 +91,7 @@ class SonarrConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} @@ -122,7 +128,9 @@ class SonarrConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def _async_reauth_update_entry(self, data: dict[str, Any]) -> FlowResult: + async def _async_reauth_update_entry( + self, data: dict[str, Any] + ) -> ConfigFlowResult: """Update existing config entry.""" assert self.entry is not None self.hass.config_entries.async_update_entry(self.entry, data=data) @@ -157,7 +165,7 @@ class SonarrOptionsFlowHandler(OptionsFlow): async def async_step_init( self, user_input: dict[str, int] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage Sonarr options.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) diff --git a/homeassistant/components/songpal/config_flow.py b/homeassistant/components/songpal/config_flow.py index a1e7938f3f8..03c1aa4bdf2 100644 --- a/homeassistant/components/songpal/config_flow.py +++ b/homeassistant/components/songpal/config_flow.py @@ -7,10 +7,9 @@ from urllib.parse import urlparse from songpal import Device, SongpalException import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import ssdp +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_NAME -from homeassistant.data_entry_flow import FlowResult from .const import CONF_ENDPOINT, DOMAIN @@ -27,7 +26,7 @@ class SongpalConfig: self.endpoint = endpoint -class SongpalConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SongpalConfigFlow(ConfigFlow, domain=DOMAIN): """Songpal configuration flow.""" VERSION = 1 @@ -93,7 +92,9 @@ class SongpalConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): data={CONF_NAME: self.conf.name, CONF_ENDPOINT: self.conf.endpoint}, ) - async def async_step_ssdp(self, discovery_info: ssdp.SsdpServiceInfo) -> FlowResult: + async def async_step_ssdp( + self, discovery_info: ssdp.SsdpServiceInfo + ) -> ConfigFlowResult: """Handle a discovered Songpal device.""" await self.async_set_unique_id(discovery_info.upnp[ssdp.ATTR_UPNP_UDN]) self._abort_if_unique_id_configured() diff --git a/homeassistant/components/sonos/config_flow.py b/homeassistant/components/sonos/config_flow.py index cc453f14691..daf9e5c7405 100644 --- a/homeassistant/components/sonos/config_flow.py +++ b/homeassistant/components/sonos/config_flow.py @@ -3,8 +3,8 @@ from collections.abc import Awaitable import dataclasses from homeassistant.components import ssdp, zeroconf +from homeassistant.config_entries import ConfigFlowResult from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.config_entry_flow import DiscoveryFlowHandler from .const import DATA_SONOS_DISCOVERY_MANAGER, DOMAIN, UPNP_ST @@ -25,7 +25,7 @@ class SonosDiscoveryFlowHandler(DiscoveryFlowHandler[Awaitable[bool]], domain=DO async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by zeroconf.""" hostname = discovery_info.hostname if hostname is None or not hostname.lower().startswith("sonos"): diff --git a/homeassistant/components/soundtouch/config_flow.py b/homeassistant/components/soundtouch/config_flow.py index 8f9b993d0d8..757e14438e9 100644 --- a/homeassistant/components/soundtouch/config_flow.py +++ b/homeassistant/components/soundtouch/config_flow.py @@ -5,10 +5,9 @@ from libsoundtouch import soundtouch_device from requests import RequestException import voluptuous as vol -from homeassistant import config_entries from homeassistant.components.zeroconf import ZeroconfServiceInfo +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import config_validation as cv from .const import DOMAIN @@ -16,7 +15,7 @@ from .const import DOMAIN _LOGGER = logging.getLogger(__name__) -class SoundtouchConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SoundtouchConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Bose SoundTouch.""" VERSION = 1 @@ -53,7 +52,7 @@ class SoundtouchConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by a zeroconf discovery.""" self.host = discovery_info.host diff --git a/homeassistant/components/speedtestdotnet/config_flow.py b/homeassistant/components/speedtestdotnet/config_flow.py index 58ef53b2c9c..43b4bb64a9d 100644 --- a/homeassistant/components/speedtestdotnet/config_flow.py +++ b/homeassistant/components/speedtestdotnet/config_flow.py @@ -5,9 +5,13 @@ from typing import Any import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from .const import ( CONF_SERVER_ID, @@ -18,7 +22,7 @@ from .const import ( ) -class SpeedTestFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SpeedTestFlowHandler(ConfigFlow, domain=DOMAIN): """Handle Speedtest.net config flow.""" VERSION = 1 @@ -26,14 +30,14 @@ class SpeedTestFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> SpeedTestOptionsFlowHandler: """Get the options flow for this handler.""" return SpeedTestOptionsFlowHandler(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -44,17 +48,17 @@ class SpeedTestFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title=DEFAULT_NAME, data=user_input) -class SpeedTestOptionsFlowHandler(config_entries.OptionsFlow): +class SpeedTestOptionsFlowHandler(OptionsFlow): """Handle SpeedTest options.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry self._servers: dict = {} async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the options.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/spider/config_flow.py b/homeassistant/components/spider/config_flow.py index eaf30bc541f..a8466041dde 100644 --- a/homeassistant/components/spider/config_flow.py +++ b/homeassistant/components/spider/config_flow.py @@ -4,7 +4,7 @@ import logging from spiderpy.spiderapi import SpiderApi, SpiderApiException, UnauthorizedException import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME from .const import DEFAULT_SCAN_INTERVAL, DOMAIN @@ -20,7 +20,7 @@ RESULT_CONN_ERROR = "conn_error" RESULT_SUCCESS = "success" -class SpiderConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SpiderConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a Spider config flow.""" VERSION = 1 diff --git a/homeassistant/components/spotify/config_flow.py b/homeassistant/components/spotify/config_flow.py index bbfb92db091..8629e0864ff 100644 --- a/homeassistant/components/spotify/config_flow.py +++ b/homeassistant/components/spotify/config_flow.py @@ -7,8 +7,7 @@ from typing import Any from spotipy import Spotify -from homeassistant.config_entries import ConfigEntry -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigEntry, ConfigFlowResult from homeassistant.helpers import config_entry_oauth2_flow from .const import DOMAIN, SPOTIFY_SCOPES @@ -34,7 +33,7 @@ class SpotifyFlowHandler( """Extra data that needs to be appended to the authorize url.""" return {"scope": ",".join(SPOTIFY_SCOPES)} - async def async_oauth_create_entry(self, data: dict[str, Any]) -> FlowResult: + async def async_oauth_create_entry(self, data: dict[str, Any]) -> ConfigFlowResult: """Create an entry for Spotify.""" spotify = Spotify(auth=data["token"]["access_token"]) @@ -56,7 +55,9 @@ class SpotifyFlowHandler( return self.async_create_entry(title=name, data=data) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon migration of old entries.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -66,7 +67,7 @@ class SpotifyFlowHandler( async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" if self.reauth_entry is None: return self.async_abort(reason="reauth_account_mismatch") diff --git a/homeassistant/components/sql/config_flow.py b/homeassistant/components/sql/config_flow.py index a697bdc51a7..7b03a843941 100644 --- a/homeassistant/components/sql/config_flow.py +++ b/homeassistant/components/sql/config_flow.py @@ -12,13 +12,18 @@ import sqlparse from sqlparse.exceptions import SQLParseError import voluptuous as vol -from homeassistant import config_entries from homeassistant.components.recorder import CONF_DB_URL, get_instance from homeassistant.components.sensor import ( CONF_STATE_CLASS, SensorDeviceClass, SensorStateClass, ) +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlowWithConfigEntry, +) from homeassistant.const import ( CONF_DEVICE_CLASS, CONF_NAME, @@ -26,7 +31,6 @@ from homeassistant.const import ( CONF_VALUE_TEMPLATE, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import selector from .const import CONF_COLUMN_NAME, CONF_QUERY, DOMAIN @@ -128,7 +132,7 @@ def validate_query(db_url: str, query: str, column: str) -> bool: return True -class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SQLConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for SQL integration.""" VERSION = 1 @@ -136,14 +140,14 @@ class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> SQLOptionsFlowHandler: """Get the options flow for this handler.""" return SQLOptionsFlowHandler(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step.""" errors = {} description_placeholders = {} @@ -204,12 +208,12 @@ class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class SQLOptionsFlowHandler(config_entries.OptionsFlowWithConfigEntry): +class SQLOptionsFlowHandler(OptionsFlowWithConfigEntry): """Handle SQL options.""" async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage SQL options.""" errors = {} description_placeholders = {} diff --git a/homeassistant/components/squeezebox/config_flow.py b/homeassistant/components/squeezebox/config_flow.py index d2786bf213b..c05f4ac9fef 100644 --- a/homeassistant/components/squeezebox/config_flow.py +++ b/homeassistant/components/squeezebox/config_flow.py @@ -7,10 +7,11 @@ from typing import TYPE_CHECKING from pysqueezebox import Server, async_discover import voluptuous as vol -from homeassistant import config_entries, data_entry_flow from homeassistant.components import dhcp from homeassistant.components.media_player import DOMAIN as MP_DOMAIN +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME +from homeassistant.data_entry_flow import AbortFlow from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.entity_registry import async_get @@ -61,7 +62,7 @@ def _base_schema(discovery_info=None): return vol.Schema(base_schema) -class SqueezeboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SqueezeboxConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Logitech Squeezebox.""" VERSION = 1 @@ -187,7 +188,7 @@ class SqueezeboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_dhcp( self, discovery_info: dhcp.DhcpServiceInfo - ) -> data_entry_flow.FlowResult: + ) -> ConfigFlowResult: """Handle dhcp discovery of a Squeezebox player.""" _LOGGER.debug( "Reached dhcp discovery of a player with info: %s", discovery_info @@ -204,7 +205,7 @@ class SqueezeboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): # if we have detected this player, do nothing. if not, there must be a server out there for us to configure, so start the normal user flow (which tries to autodetect server) if registry.async_get_entity_id(MP_DOMAIN, DOMAIN, self.unique_id) is not None: # this player is already known, so do nothing other than mark as configured - raise data_entry_flow.AbortFlow("already_configured") + raise AbortFlow("already_configured") # if the player is unknown, then we likely need to configure its server return await self.async_step_user() diff --git a/homeassistant/components/srp_energy/config_flow.py b/homeassistant/components/srp_energy/config_flow.py index ac32e005e06..089b036fea7 100644 --- a/homeassistant/components/srp_energy/config_flow.py +++ b/homeassistant/components/srp_energy/config_flow.py @@ -6,10 +6,9 @@ from typing import Any from srpenergy.client import SrpEnergyClient import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ID, CONF_NAME, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError from .const import CONF_IS_TOU, DOMAIN, LOGGER @@ -35,13 +34,13 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, return is_valid -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SRPEnergyConfigFlow(ConfigFlow, domain=DOMAIN): """Handle an SRP Energy config flow.""" VERSION = 1 @callback - def _show_form(self, errors: dict[str, Any]) -> FlowResult: + def _show_form(self, errors: dict[str, Any]) -> ConfigFlowResult: """Show the form to the user.""" LOGGER.debug("Show Form") return self.async_show_form( @@ -62,7 +61,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" LOGGER.debug("Config entry") errors: dict[str, str] = {} diff --git a/homeassistant/components/starline/config_flow.py b/homeassistant/components/starline/config_flow.py index a00e24ca2a6..30a95ed6869 100644 --- a/homeassistant/components/starline/config_flow.py +++ b/homeassistant/components/starline/config_flow.py @@ -4,8 +4,9 @@ from __future__ import annotations from starline import StarlineAuth import voluptuous as vol -from homeassistant import config_entries, core +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import callback from .const import ( _LOGGER, @@ -24,7 +25,7 @@ from .const import ( ) -class StarlineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class StarlineFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a StarLine config flow.""" VERSION = 1 @@ -84,7 +85,7 @@ class StarlineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return await self._async_authenticate_user(error) return self._async_form_auth_captcha(error) - @core.callback + @callback def _async_form_auth_app(self, error=None): """Authenticate application form.""" errors = {} @@ -106,7 +107,7 @@ class StarlineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - @core.callback + @callback def _async_form_auth_user(self, error=None): """Authenticate user form.""" errors = {} @@ -128,7 +129,7 @@ class StarlineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - @core.callback + @callback def _async_form_auth_mfa(self, error=None): """Authenticate mfa form.""" errors = {} @@ -148,7 +149,7 @@ class StarlineFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): description_placeholders={"phone_number": self._phone_number}, ) - @core.callback + @callback def _async_form_auth_captcha(self, error=None): """Captcha verification form.""" errors = {} diff --git a/homeassistant/components/starlink/config_flow.py b/homeassistant/components/starlink/config_flow.py index 987a84796f1..14840ccf46d 100644 --- a/homeassistant/components/starlink/config_flow.py +++ b/homeassistant/components/starlink/config_flow.py @@ -6,9 +6,8 @@ from typing import Any from starlink_grpc import ChannelContext, GrpcError, get_id import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_IP_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -22,7 +21,7 @@ class StarlinkConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Ask the user for a server address and a name for the system.""" errors = {} if user_input: diff --git a/homeassistant/components/steam_online/config_flow.py b/homeassistant/components/steam_online/config_flow.py index 094db9ba207..e3a239c7181 100644 --- a/homeassistant/components/steam_online/config_flow.py +++ b/homeassistant/components/steam_online/config_flow.py @@ -7,10 +7,15 @@ from typing import Any import steam import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + SOURCE_REAUTH, + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_API_KEY, Platform from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import config_validation as cv, entity_registry as er from .const import CONF_ACCOUNT, CONF_ACCOUNTS, DOMAIN, LOGGER, PLACEHOLDERS @@ -27,24 +32,24 @@ def validate_input(user_input: dict[str, str]) -> dict[str, str | int]: return names["response"]["players"]["player"][0] -class SteamFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SteamFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow for Steam.""" def __init__(self) -> None: """Initialize the flow.""" - self.entry: config_entries.ConfigEntry | None = None + self.entry: ConfigEntry | None = None @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, - ) -> config_entries.OptionsFlow: + config_entry: ConfigEntry, + ) -> OptionsFlow: """Get the options flow for this handler.""" return SteamOptionsFlowHandler(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} if user_input is None and self.entry: @@ -65,7 +70,7 @@ class SteamFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors["base"] = "unknown" if not errors: entry = await self.async_set_unique_id(user_input[CONF_ACCOUNT]) - if entry and self.source == config_entries.SOURCE_REAUTH: + if entry and self.source == SOURCE_REAUTH: self.hass.config_entries.async_update_entry(entry, data=user_input) await self.hass.config_entries.async_reload(entry.entry_id) return self.async_abort(reason="reauth_successful") @@ -92,7 +97,9 @@ class SteamFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): description_placeholders=PLACEHOLDERS, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle a reauthorization flow request.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -100,7 +107,7 @@ class SteamFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" if user_input is not None: return await self.async_step_user() @@ -116,17 +123,17 @@ def _batch_ids(ids: list[str]) -> Iterator[list[str]]: yield ids[i : i + MAX_IDS_TO_REQUEST] -class SteamOptionsFlowHandler(config_entries.OptionsFlow): +class SteamOptionsFlowHandler(OptionsFlow): """Handle Steam client options.""" - def __init__(self, entry: config_entries.ConfigEntry) -> None: + def __init__(self, entry: ConfigEntry) -> None: """Initialize options flow.""" self.entry = entry self.options = dict(entry.options) async def async_step_init( self, user_input: dict[str, dict[str, str]] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage Steam options.""" if user_input is not None: await self.hass.config_entries.async_unload(self.entry.entry_id) diff --git a/homeassistant/components/steamist/config_flow.py b/homeassistant/components/steamist/config_flow.py index 3d5fe000f35..2a5a4cf5d07 100644 --- a/homeassistant/components/steamist/config_flow.py +++ b/homeassistant/components/steamist/config_flow.py @@ -8,11 +8,10 @@ from aiosteamist import Steamist from discovery30303 import Device30303, normalize_mac import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import dhcp +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_DEVICE, CONF_HOST, CONF_MODEL, CONF_NAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import device_registry as dr from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.typing import DiscoveryInfoType @@ -28,7 +27,7 @@ from .discovery import ( _LOGGER = logging.getLogger(__name__) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SteamistConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Steamist.""" VERSION = 1 @@ -38,7 +37,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self._discovered_devices: dict[str, Device30303] = {} self._discovered_device: Device30303 | None = None - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle discovery via dhcp.""" self._discovered_device = Device30303( ipaddress=discovery_info.ip, @@ -50,7 +51,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_integration_discovery( self, discovery_info: DiscoveryInfoType - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle integration discovery.""" self._discovered_device = Device30303( ipaddress=discovery_info["ipaddress"], @@ -60,7 +61,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) return await self._async_handle_discovery() - async def _async_handle_discovery(self) -> FlowResult: + async def _async_handle_discovery(self) -> ConfigFlowResult: """Handle any discovery.""" device = self._discovered_device assert device is not None @@ -91,7 +92,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_discovery_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -108,7 +109,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) @callback - def _async_create_entry_from_device(self, device: Device30303) -> FlowResult: + def _async_create_entry_from_device(self, device: Device30303) -> ConfigFlowResult: """Create a config entry from a device.""" self._async_abort_entries_match({CONF_HOST: device.ipaddress}) data = {CONF_HOST: device.ipaddress, CONF_NAME: device.name} @@ -121,7 +122,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_pick_device( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the step to pick discovered device.""" if user_input is not None: mac = user_input[CONF_DEVICE] @@ -153,7 +154,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors = {} diff --git a/homeassistant/components/stookalert/config_flow.py b/homeassistant/components/stookalert/config_flow.py index 02189bc161f..bc37fbded72 100644 --- a/homeassistant/components/stookalert/config_flow.py +++ b/homeassistant/components/stookalert/config_flow.py @@ -5,8 +5,7 @@ from typing import Any import voluptuous as vol -from homeassistant.config_entries import ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import CONF_PROVINCE, DOMAIN, PROVINCES @@ -18,7 +17,7 @@ class StookalertFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if user_input is not None: await self.async_set_unique_id(user_input[CONF_PROVINCE]) diff --git a/homeassistant/components/stookwijzer/config_flow.py b/homeassistant/components/stookwijzer/config_flow.py index fdf4cc06f37..7a4ddae91c8 100644 --- a/homeassistant/components/stookwijzer/config_flow.py +++ b/homeassistant/components/stookwijzer/config_flow.py @@ -5,9 +5,8 @@ from typing import Any import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_LATITUDE, CONF_LOCATION, CONF_LONGITUDE -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.selector import LocationSelector from .const import DOMAIN @@ -20,7 +19,7 @@ class StookwijzerFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if user_input is not None: diff --git a/homeassistant/components/streamlabswater/config_flow.py b/homeassistant/components/streamlabswater/config_flow.py index 5cede037d5a..ebe163c201f 100644 --- a/homeassistant/components/streamlabswater/config_flow.py +++ b/homeassistant/components/streamlabswater/config_flow.py @@ -6,10 +6,9 @@ from typing import Any from streamlabswater.streamlabswater import StreamlabsClient import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError from .const import DOMAIN, LOGGER @@ -32,7 +31,7 @@ class StreamlabsConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: @@ -57,7 +56,7 @@ class StreamlabsConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_import(self, user_input: dict[str, Any]) -> FlowResult: + async def async_step_import(self, user_input: dict[str, Any]) -> ConfigFlowResult: """Import the yaml config.""" self._async_abort_entries_match(user_input) try: diff --git a/homeassistant/components/subaru/config_flow.py b/homeassistant/components/subaru/config_flow.py index b21feab7843..aeee2cb7675 100644 --- a/homeassistant/components/subaru/config_flow.py +++ b/homeassistant/components/subaru/config_flow.py @@ -14,7 +14,12 @@ from subarulink import ( from subarulink.const import COUNTRY_CAN, COUNTRY_USA import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import ( CONF_COUNTRY, CONF_DEVICE_ID, @@ -23,7 +28,6 @@ from homeassistant.const import ( CONF_USERNAME, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client, config_validation as cv from .const import CONF_UPDATE_ENABLED, DOMAIN @@ -34,7 +38,7 @@ CONF_VALIDATION_CODE = "validation_code" PIN_SCHEMA = vol.Schema({vol.Required(CONF_PIN): str}) -class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SubaruConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Subaru.""" VERSION = 1 @@ -46,7 +50,7 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the start of the config flow.""" error = None @@ -96,7 +100,7 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> OptionsFlowHandler: """Get the options flow for this handler.""" return OptionsFlowHandler(config_entry) @@ -129,7 +133,7 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_two_factor( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Select contact method and request 2FA code from Subaru.""" error = None if user_input: @@ -157,7 +161,7 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_two_factor_validate( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Validate received 2FA code with Subaru.""" error = None if user_input: @@ -182,7 +186,7 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_pin( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle second part of config flow, if required.""" error = None if user_input and self.controller.update_saved_pin(user_input[CONF_PIN]): @@ -202,16 +206,16 @@ class SubaruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_show_form(step_id="pin", data_schema=PIN_SCHEMA, errors=error) -class OptionsFlowHandler(config_entries.OptionsFlow): +class OptionsFlowHandler(OptionsFlow): """Handle a option flow for Subaru.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle options flow.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) diff --git a/homeassistant/components/suez_water/config_flow.py b/homeassistant/components/suez_water/config_flow.py index d01b8035a0c..667e1b7abaa 100644 --- a/homeassistant/components/suez_water/config_flow.py +++ b/homeassistant/components/suez_water/config_flow.py @@ -8,9 +8,8 @@ from pysuez import SuezClient from pysuez.client import PySuezError import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError from .const import CONF_COUNTER_ID, DOMAIN @@ -51,7 +50,7 @@ class SuezWaterConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: @@ -75,7 +74,7 @@ class SuezWaterConfigFlow(ConfigFlow, domain=DOMAIN): step_id="user", data_schema=STEP_USER_DATA_SCHEMA, errors=errors ) - async def async_step_import(self, user_input: dict[str, Any]) -> FlowResult: + async def async_step_import(self, user_input: dict[str, Any]) -> ConfigFlowResult: """Import the yaml config.""" await self.async_set_unique_id(user_input[CONF_USERNAME]) self._abort_if_unique_id_configured() diff --git a/homeassistant/components/sun/config_flow.py b/homeassistant/components/sun/config_flow.py index ae2e5a42efc..fbeeaaea176 100644 --- a/homeassistant/components/sun/config_flow.py +++ b/homeassistant/components/sun/config_flow.py @@ -3,8 +3,7 @@ from __future__ import annotations from typing import Any -from homeassistant.config_entries import ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import DEFAULT_NAME, DOMAIN @@ -16,7 +15,7 @@ class SunConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -26,6 +25,6 @@ class SunConfigFlow(ConfigFlow, domain=DOMAIN): return self.async_show_form(step_id="user") - async def async_step_import(self, user_input: dict[str, Any]) -> FlowResult: + async def async_step_import(self, user_input: dict[str, Any]) -> ConfigFlowResult: """Handle import from configuration.yaml.""" return await self.async_step_user(user_input) diff --git a/homeassistant/components/sunweg/config_flow.py b/homeassistant/components/sunweg/config_flow.py index cd24a4722e9..c8a8c4e8b2f 100644 --- a/homeassistant/components/sunweg/config_flow.py +++ b/homeassistant/components/sunweg/config_flow.py @@ -2,15 +2,14 @@ from sunweg.api import APIHelper import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from .const import CONF_PLANT_ID, DOMAIN -class SunWEGConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SunWEGConfigFlow(ConfigFlow, domain=DOMAIN): """Config flow class.""" VERSION = 1 @@ -21,7 +20,7 @@ class SunWEGConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.data: dict = {} @callback - def _async_show_user_form(self, errors=None) -> FlowResult: + def _async_show_user_form(self, errors=None) -> ConfigFlowResult: """Show the form to the user.""" data_schema = vol.Schema( { @@ -34,7 +33,7 @@ class SunWEGConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=data_schema, errors=errors ) - async def async_step_user(self, user_input=None) -> FlowResult: + async def async_step_user(self, user_input=None) -> ConfigFlowResult: """Handle the start of the config flow.""" if not user_input: return self._async_show_user_form() @@ -50,7 +49,7 @@ class SunWEGConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.data = user_input return await self.async_step_plant() - async def async_step_plant(self, user_input=None) -> FlowResult: + async def async_step_plant(self, user_input=None) -> ConfigFlowResult: """Handle adding a "plant" to Home Assistant.""" plant_list = await self.hass.async_add_executor_job(self.api.listPlants) diff --git a/homeassistant/components/surepetcare/config_flow.py b/homeassistant/components/surepetcare/config_flow.py index 81607b582c1..53f820af3d9 100644 --- a/homeassistant/components/surepetcare/config_flow.py +++ b/homeassistant/components/surepetcare/config_flow.py @@ -9,10 +9,9 @@ import surepy from surepy.exceptions import SurePetcareAuthenticationError, SurePetcareError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN, SURE_API_TIMEOUT @@ -42,7 +41,7 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, return {CONF_TOKEN: token} -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SurePetCareConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Sure Petcare.""" VERSION = 1 @@ -53,7 +52,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if user_input is None: return self.async_show_form(step_id="user", data_schema=USER_DATA_SCHEMA) @@ -83,14 +82,16 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=USER_DATA_SCHEMA, errors=errors ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self._username = entry_data[CONF_USERNAME] return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" errors = {} if user_input is not None: diff --git a/homeassistant/components/swiss_public_transport/config_flow.py b/homeassistant/components/swiss_public_transport/config_flow.py index e864f31cd6c..59d01743de4 100644 --- a/homeassistant/components/swiss_public_transport/config_flow.py +++ b/homeassistant/components/swiss_public_transport/config_flow.py @@ -9,9 +9,8 @@ from opendata_transport.exceptions import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_NAME -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -27,7 +26,7 @@ DATA_SCHEMA = vol.Schema( _LOGGER = logging.getLogger(__name__) -class SwissPublicTransportConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SwissPublicTransportConfigFlow(ConfigFlow, domain=DOMAIN): """Swiss public transport config flow.""" VERSION = 1 @@ -35,7 +34,7 @@ class SwissPublicTransportConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Async user step to set up the connection.""" errors: dict[str, str] = {} if user_input is not None: @@ -70,7 +69,7 @@ class SwissPublicTransportConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): description_placeholders=PLACEHOLDERS, ) - async def async_step_import(self, import_input: dict[str, Any]) -> FlowResult: + async def async_step_import(self, import_input: dict[str, Any]) -> ConfigFlowResult: """Async import step to set up the connection.""" await self.async_set_unique_id( f"{import_input[CONF_START]} {import_input[CONF_DESTINATION]}" diff --git a/homeassistant/components/switchbee/config_flow.py b/homeassistant/components/switchbee/config_flow.py index 8f109c7bf26..956142961aa 100644 --- a/homeassistant/components/switchbee/config_flow.py +++ b/homeassistant/components/switchbee/config_flow.py @@ -8,10 +8,9 @@ from switchbee.api.central_unit import SwitchBeeError from switchbee.api.polling import CentralUnitPolling import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv @@ -53,14 +52,14 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> str: return format_mac(api.mac) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SwitchBeeConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for SwitchBee Smart Home.""" VERSION = 2 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Show the setup form to the user.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/switchbot/config_flow.py b/homeassistant/components/switchbot/config_flow.py index 35e76d8bbb3..94261a1faae 100644 --- a/homeassistant/components/switchbot/config_flow.py +++ b/homeassistant/components/switchbot/config_flow.py @@ -18,7 +18,12 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import ( CONF_ADDRESS, CONF_PASSWORD, @@ -26,7 +31,7 @@ from homeassistant.const import ( CONF_USERNAME, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import AbortFlow, FlowResult +from homeassistant.data_entry_flow import AbortFlow from .const import ( CONF_ENCRYPTION_KEY, @@ -78,7 +83,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" _LOGGER.debug("Discovered bluetooth device: %s", discovery_info.as_dict()) await self.async_set_unique_id(format_unique_id(discovery_info.address)) @@ -109,7 +114,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def _async_create_entry_from_discovery( self, user_input: dict[str, Any] - ) -> FlowResult: + ) -> ConfigFlowResult: """Create an entry from a discovery.""" assert self._discovered_adv is not None discovery = self._discovered_adv @@ -126,7 +131,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm a single device.""" assert self._discovered_adv is not None if user_input is not None: @@ -143,7 +148,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_password( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the password step.""" assert self._discovered_adv is not None if user_input is not None: @@ -162,7 +167,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_lock_auth( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the SwitchBot API auth step.""" errors = {} assert self._discovered_adv is not None @@ -204,7 +209,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_lock_choose_method( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the SwitchBot API chose method step.""" assert self._discovered_adv is not None @@ -218,7 +223,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_lock_key( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the encryption key step.""" errors = {} assert self._discovered_adv is not None @@ -285,7 +290,7 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" errors: dict[str, str] = {} device_adv: SwitchBotAdvertisement | None = None @@ -335,7 +340,7 @@ class SwitchbotOptionsFlowHandler(OptionsFlow): async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage Switchbot options.""" if user_input is not None: # Update common entity options for all other entities. diff --git a/homeassistant/components/switchbot_cloud/config_flow.py b/homeassistant/components/switchbot_cloud/config_flow.py index 5c99567968c..c01699b8c5d 100644 --- a/homeassistant/components/switchbot_cloud/config_flow.py +++ b/homeassistant/components/switchbot_cloud/config_flow.py @@ -6,9 +6,8 @@ from typing import Any from switchbot_api import CannotConnect, InvalidAuth, SwitchBotAPI import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_API_TOKEN -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN, ENTRY_TITLE @@ -22,14 +21,14 @@ STEP_USER_DATA_SCHEMA = vol.Schema( ) -class SwitchBotCloudConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SwitchBotCloudConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for SwitchBot via API.""" VERSION = 1 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: diff --git a/homeassistant/components/switcher_kis/config_flow.py b/homeassistant/components/switcher_kis/config_flow.py index d196bae8568..f459e6e8d76 100644 --- a/homeassistant/components/switcher_kis/config_flow.py +++ b/homeassistant/components/switcher_kis/config_flow.py @@ -3,17 +3,18 @@ from __future__ import annotations from typing import Any -from homeassistant import config_entries -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import DATA_DISCOVERY, DOMAIN from .utils import async_discover_devices -class SwitcherFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class SwitcherFlowHandler(ConfigFlow, domain=DOMAIN): """Handle Switcher config flow.""" - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: + async def async_step_import( + self, import_config: dict[str, Any] + ) -> ConfigFlowResult: """Handle a flow initiated by import.""" if self._async_current_entries(True): return self.async_abort(reason="single_instance_allowed") @@ -22,7 +23,7 @@ class SwitcherFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the start of the config flow.""" if self._async_current_entries(True): return self.async_abort(reason="single_instance_allowed") @@ -37,7 +38,7 @@ class SwitcherFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle user-confirmation of the config flow.""" discovered_devices = await self.hass.data[DOMAIN][DATA_DISCOVERY] diff --git a/homeassistant/components/syncthing/config_flow.py b/homeassistant/components/syncthing/config_flow.py index 7421a385f08..e936cc23183 100644 --- a/homeassistant/components/syncthing/config_flow.py +++ b/homeassistant/components/syncthing/config_flow.py @@ -2,8 +2,10 @@ import aiosyncthing import voluptuous as vol -from homeassistant import config_entries, core, exceptions +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_TOKEN, CONF_URL, CONF_VERIFY_SSL +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from .const import DEFAULT_URL, DEFAULT_VERIFY_SSL, DOMAIN @@ -16,7 +18,7 @@ DATA_SCHEMA = vol.Schema( ) -async def validate_input(hass: core.HomeAssistant, data): +async def validate_input(hass: HomeAssistant, data): """Validate the user input allows us to connect.""" try: @@ -34,7 +36,7 @@ async def validate_input(hass: core.HomeAssistant, data): raise CannotConnect from error -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SyncThingConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for syncthing.""" VERSION = 1 @@ -60,9 +62,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/syncthru/config_flow.py b/homeassistant/components/syncthru/config_flow.py index 664de1f6d96..8cd1c2c7b3b 100644 --- a/homeassistant/components/syncthru/config_flow.py +++ b/homeassistant/components/syncthru/config_flow.py @@ -7,16 +7,15 @@ from pysyncthru import ConnectionMode, SyncThru, SyncThruAPINotSupported from url_normalize import url_normalize import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import ssdp +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_NAME, CONF_URL -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client from .const import DEFAULT_MODEL, DEFAULT_NAME_TEMPLATE, DOMAIN -class SyncThruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class SyncThruConfigFlow(ConfigFlow, domain=DOMAIN): """Samsung SyncThru config flow.""" VERSION = 1 @@ -30,7 +29,9 @@ class SyncThruConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return await self._async_show_form(step_id="user") return await self._async_check_and_create("user", user_input) - async def async_step_ssdp(self, discovery_info: ssdp.SsdpServiceInfo) -> FlowResult: + async def async_step_ssdp( + self, discovery_info: ssdp.SsdpServiceInfo + ) -> ConfigFlowResult: """Handle SSDP initiated flow.""" await self.async_set_unique_id(discovery_info.upnp[ssdp.ATTR_UPNP_UDN]) self._abort_if_unique_id_configured() diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py index f49eb7feed1..4da188732ad 100644 --- a/homeassistant/components/synology_dsm/config_flow.py +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -17,9 +17,13 @@ from synology_dsm.exceptions import ( ) import voluptuous as vol -from homeassistant import exceptions from homeassistant.components import ssdp, zeroconf -from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import ( CONF_DISKS, CONF_HOST, @@ -34,7 +38,7 @@ from homeassistant.const import ( CONF_VERIFY_SSL, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.typing import DiscoveryInfoType @@ -130,7 +134,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): step_id: str, user_input: dict[str, Any] | None = None, errors: dict[str, str] | None = None, - ) -> FlowResult: + ) -> ConfigFlowResult: """Show the setup form to the user.""" if not user_input: user_input = {} @@ -156,7 +160,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_validate_input_create_entry( self, user_input: dict[str, Any], step_id: str - ) -> FlowResult: + ) -> ConfigFlowResult: """Process user input and create new or update existing config entry.""" host = user_input[CONF_HOST] port = user_input.get(CONF_PORT) @@ -231,7 +235,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" step = "user" if not user_input: @@ -240,7 +244,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a discovered synology_dsm via zeroconf.""" discovered_macs = [ format_synology_mac(mac) @@ -253,7 +257,9 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): friendly_name = discovery_info.name.removesuffix(HTTP_SUFFIX) return await self._async_from_discovery(host, friendly_name, discovered_macs) - async def async_step_ssdp(self, discovery_info: ssdp.SsdpServiceInfo) -> FlowResult: + async def async_step_ssdp( + self, discovery_info: ssdp.SsdpServiceInfo + ) -> ConfigFlowResult: """Handle a discovered synology_dsm via ssdp.""" parsed_url = urlparse(discovery_info.ssdp_location) upnp_friendly_name: str = discovery_info.upnp[ssdp.ATTR_UPNP_FRIENDLY_NAME] @@ -267,7 +273,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def _async_from_discovery( self, host: str, friendly_name: str, discovered_macs: list[str] - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a discovered synology_dsm via zeroconf or ssdp.""" existing_entry = None for discovered_mac in discovered_macs: @@ -307,7 +313,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_link( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Link a config entry from discovery.""" step = "link" if not user_input: @@ -315,7 +321,9 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): user_input = {**self.discovered_conf, **user_input} return await self.async_validate_input_create_entry(user_input, step_id=step) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self.reauth_conf = entry_data self.context["title_placeholders"][CONF_HOST] = entry_data[CONF_HOST] @@ -324,7 +332,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Perform reauth confirm upon an API authentication error.""" step = "reauth_confirm" if not user_input: @@ -334,7 +342,7 @@ class SynologyDSMFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_2sa( self, user_input: dict[str, Any], errors: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Enter 2SA code to anthenticate.""" if not self.saved_user_input: self.saved_user_input = user_input @@ -370,7 +378,7 @@ class SynologyDSMOptionsFlowHandler(OptionsFlow): async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle options flow.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) @@ -419,5 +427,5 @@ async def _login_and_fetch_syno_info(api: SynologyDSM, otp_code: str | None) -> return api.information.serial # type: ignore[no-any-return] -class InvalidData(exceptions.HomeAssistantError): +class InvalidData(HomeAssistantError): """Error to indicate we get invalid data from the nas.""" diff --git a/homeassistant/components/system_bridge/config_flow.py b/homeassistant/components/system_bridge/config_flow.py index 0b6a8b4622b..9fcecdc63c4 100644 --- a/homeassistant/components/system_bridge/config_flow.py +++ b/homeassistant/components/system_bridge/config_flow.py @@ -16,11 +16,11 @@ from systembridgemodels.get_data import GetData from systembridgemodels.system import System import voluptuous as vol -from homeassistant import config_entries, exceptions from homeassistant.components import zeroconf +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PORT from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -107,8 +107,8 @@ async def _async_get_info( return errors, None -class ConfigFlow( - config_entries.ConfigFlow, +class SystemBridgeConfigFlow( + ConfigFlow, domain=DOMAIN, ): """Handle a config flow for System Bridge.""" @@ -123,7 +123,7 @@ class ConfigFlow( async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if user_input is None: return self.async_show_form( @@ -144,7 +144,7 @@ class ConfigFlow( async def async_step_authenticate( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle getting the api-key for authentication.""" errors: dict[str, str] = {} @@ -177,7 +177,7 @@ class ConfigFlow( async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle zeroconf discovery.""" properties = discovery_info.properties host = properties.get("ip") @@ -198,7 +198,9 @@ class ConfigFlow( return await self.async_step_authenticate() - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self._name = entry_data[CONF_HOST] self._input = { @@ -209,9 +211,9 @@ class ConfigFlow( return await self.async_step_authenticate() -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/systemmonitor/config_flow.py b/homeassistant/components/systemmonitor/config_flow.py index b9b95a4a094..8dcc074a0d0 100644 --- a/homeassistant/components/systemmonitor/config_flow.py +++ b/homeassistant/components/systemmonitor/config_flow.py @@ -8,8 +8,8 @@ import voluptuous as vol from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN from homeassistant.components.homeassistant import DOMAIN as HOMEASSISTANT_DOMAIN +from homeassistant.config_entries import ConfigFlowResult from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import entity_registry as er from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue from homeassistant.helpers.schema_config_entry_flow import ( @@ -138,7 +138,9 @@ class SystemMonitorConfigFlowHandler(SchemaConfigFlowHandler, domain=DOMAIN): return "System Monitor" @callback - def async_create_entry(self, data: Mapping[str, Any], **kwargs: Any) -> FlowResult: + def async_create_entry( + self, data: Mapping[str, Any], **kwargs: Any + ) -> ConfigFlowResult: """Finish config flow and create a config entry.""" if self._async_current_entries(): return self.async_abort(reason="already_configured") diff --git a/homeassistant/components/tado/config_flow.py b/homeassistant/components/tado/config_flow.py index f9f4f80bde1..911cf6a7aac 100644 --- a/homeassistant/components/tado/config_flow.py +++ b/homeassistant/components/tado/config_flow.py @@ -9,11 +9,16 @@ from PyTado.interface import Tado import requests.exceptions import voluptuous as vol -from homeassistant import config_entries, core, exceptions from homeassistant.components import zeroconf +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult +from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import HomeAssistantError from .const import ( CONF_FALLBACK, @@ -34,9 +39,7 @@ DATA_SCHEMA = vol.Schema( ) -async def validate_input( - hass: core.HomeAssistant, data: dict[str, Any] -) -> dict[str, Any]: +async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, Any]: """Validate the user input allows us to connect. Data has the keys from DATA_SCHEMA with values provided by the user. @@ -66,14 +69,14 @@ async def validate_input( return {"title": name, UNIQUE_ID: unique_id} -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TadoConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Tado.""" VERSION = 1 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors = {} if user_input is not None: @@ -102,7 +105,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_homekit( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle HomeKit discovery.""" self._async_abort_entries_match() properties = { @@ -112,7 +115,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self._abort_if_unique_id_configured() return await self.async_step_user() - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: + async def async_step_import( + self, import_config: dict[str, Any] + ) -> ConfigFlowResult: """Import a config entry from configuration.yaml.""" _LOGGER.debug("Importing Tado from configuration.yaml") username = import_config[CONF_USERNAME] @@ -135,7 +140,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): CONF_PASSWORD: password, }, ) - except exceptions.HomeAssistantError: + except HomeAssistantError: return self.async_abort(reason="import_failed") except PyTado.exceptions.TadoWrongCredentialsException: return self.async_abort(reason="import_failed_invalid_auth") @@ -156,22 +161,22 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> OptionsFlowHandler: """Get the options flow for this handler.""" return OptionsFlowHandler(config_entry) -class OptionsFlowHandler(config_entries.OptionsFlow): +class OptionsFlowHandler(OptionsFlow): """Handle an option flow for Tado.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle options flow.""" if user_input is not None: return self.async_create_entry(data=user_input) @@ -189,13 +194,13 @@ class OptionsFlowHandler(config_entries.OptionsFlow): return self.async_show_form(step_id="init", data_schema=data_schema) -class CannotConnect(exceptions.HomeAssistantError): +class CannotConnect(HomeAssistantError): """Error to indicate we cannot connect.""" -class InvalidAuth(exceptions.HomeAssistantError): +class InvalidAuth(HomeAssistantError): """Error to indicate there is invalid auth.""" -class NoHomes(exceptions.HomeAssistantError): +class NoHomes(HomeAssistantError): """Error to indicate the account has no homes.""" diff --git a/homeassistant/components/tailscale/config_flow.py b/homeassistant/components/tailscale/config_flow.py index 5f28c566801..ca8d91acbfd 100644 --- a/homeassistant/components/tailscale/config_flow.py +++ b/homeassistant/components/tailscale/config_flow.py @@ -7,10 +7,9 @@ from typing import Any from tailscale import Tailscale, TailscaleAuthenticationError, TailscaleError import voluptuous as vol -from homeassistant.config_entries import ConfigEntry, ConfigFlow +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import CONF_TAILNET, DOMAIN @@ -36,7 +35,7 @@ class TailscaleFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} @@ -82,7 +81,9 @@ class TailscaleFlowHandler(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle initiation of re-authentication with Tailscale.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -91,7 +92,7 @@ class TailscaleFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle re-authentication with Tailscale.""" errors = {} diff --git a/homeassistant/components/tailwind/config_flow.py b/homeassistant/components/tailwind/config_flow.py index 97515f17f3f..af8a2699190 100644 --- a/homeassistant/components/tailwind/config_flow.py +++ b/homeassistant/components/tailwind/config_flow.py @@ -16,9 +16,9 @@ import voluptuous as vol from homeassistant.components import zeroconf from homeassistant.components.dhcp import DhcpServiceInfo -from homeassistant.config_entries import ConfigEntry, ConfigFlow +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_TOKEN -from homeassistant.data_entry_flow import AbortFlow, FlowResult +from homeassistant.data_entry_flow import AbortFlow from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.selector import ( @@ -44,7 +44,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} @@ -84,7 +84,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle zeroconf discovery of a Tailwind device.""" if not (device_id := discovery_info.properties.get("device_id")): return self.async_abort(reason="no_device_id") @@ -112,7 +112,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by zeroconf.""" errors = {} @@ -143,7 +143,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, _: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth(self, _: Mapping[str, Any]) -> ConfigFlowResult: """Handle initiation of re-authentication with a Tailwind device.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -152,7 +152,7 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle re-authentication with a Tailwind device.""" errors = {} @@ -183,7 +183,9 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_dhcp(self, discovery_info: DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: DhcpServiceInfo + ) -> ConfigFlowResult: """Handle dhcp discovery to update existing entries. This flow is triggered only by DHCP discovery of known devices. @@ -196,7 +198,9 @@ class TailwindFlowHandler(ConfigFlow, domain=DOMAIN): # abort the flow with an unknown error. return self.async_abort(reason="unknown") - async def _async_step_create_entry(self, *, host: str, token: str) -> FlowResult: + async def _async_step_create_entry( + self, *, host: str, token: str + ) -> ConfigFlowResult: """Create entry.""" tailwind = Tailwind( host=host, token=token, session=async_get_clientsession(self.hass) diff --git a/homeassistant/components/tami4/config_flow.py b/homeassistant/components/tami4/config_flow.py index b36ba9c46c0..cf158cfa166 100644 --- a/homeassistant/components/tami4/config_flow.py +++ b/homeassistant/components/tami4/config_flow.py @@ -8,8 +8,7 @@ from typing import Any from Tami4EdgeAPI import Tami4EdgeAPI, exceptions import voluptuous as vol -from homeassistant import config_entries -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.exceptions import HomeAssistantError import homeassistant.helpers.config_validation as cv @@ -23,7 +22,7 @@ _STEP_OTP_CODE_SCHEMA = vol.Schema({vol.Required("otp"): cv.string}) _PHONE_MATCHER = re.compile(r"^(\+?972)?0?(?P\d{8,9})$") -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class Tami4ConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Tami4Edge.""" VERSION = 1 @@ -32,7 +31,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the otp request step.""" errors = {} if user_input is not None: @@ -62,7 +61,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_otp( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the otp submission step.""" errors = {} if user_input is not None: diff --git a/homeassistant/components/tankerkoenig/config_flow.py b/homeassistant/components/tankerkoenig/config_flow.py index 9bdf5ef0fe0..2c2906132d4 100644 --- a/homeassistant/components/tankerkoenig/config_flow.py +++ b/homeassistant/components/tankerkoenig/config_flow.py @@ -13,7 +13,12 @@ from aiotankerkoenig import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import ( CONF_API_KEY, CONF_LATITUDE, @@ -25,7 +30,6 @@ from homeassistant.const import ( UnitOfLength, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.selector import ( @@ -52,7 +56,7 @@ async def async_get_nearby_stations( ) -class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class FlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 @@ -66,14 +70,14 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> OptionsFlowHandler: """Get the options flow for this handler.""" return OptionsFlowHandler(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if not user_input: return self._show_form_user() @@ -110,7 +114,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_select_station( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the step select_station of a flow initialized by the user.""" if not user_input: return self.async_show_form( @@ -126,13 +130,15 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): options={CONF_SHOW_ON_MAP: True}, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Perform reauth confirm upon an API authentication error.""" if not user_input: return self._show_form_reauth() @@ -158,7 +164,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self, user_input: dict[str, Any] | None = None, errors: dict[str, Any] | None = None, - ) -> FlowResult: + ) -> ConfigFlowResult: if user_input is None: user_input = {} return self.async_show_form( @@ -204,7 +210,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self, user_input: dict[str, Any] | None = None, errors: dict[str, Any] | None = None, - ) -> FlowResult: + ) -> ConfigFlowResult: if user_input is None: user_input = {} return self.async_show_form( @@ -221,7 +227,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): def _create_entry( self, data: dict[str, Any], options: dict[str, Any] - ) -> FlowResult: + ) -> ConfigFlowResult: return self.async_create_entry( title=data[CONF_NAME], data=data, @@ -229,17 +235,17 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) -class OptionsFlowHandler(config_entries.OptionsFlow): +class OptionsFlowHandler(OptionsFlow): """Handle an options flow.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry self._stations: dict[str, str] = {} async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle options flow.""" if user_input is not None: self.hass.config_entries.async_update_entry( diff --git a/homeassistant/components/tasmota/config_flow.py b/homeassistant/components/tasmota/config_flow.py index d8981090d58..c1740961228 100644 --- a/homeassistant/components/tasmota/config_flow.py +++ b/homeassistant/components/tasmota/config_flow.py @@ -5,15 +5,14 @@ from typing import Any import voluptuous as vol -from homeassistant import config_entries from homeassistant.components.mqtt import valid_subscribe_topic -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.helpers.service_info.mqtt import MqttServiceInfo from .const import CONF_DISCOVERY_PREFIX, DEFAULT_PREFIX, DOMAIN -class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class FlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 @@ -22,7 +21,9 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): """Initialize flow.""" self._prefix = DEFAULT_PREFIX - async def async_step_mqtt(self, discovery_info: MqttServiceInfo) -> FlowResult: + async def async_step_mqtt( + self, discovery_info: MqttServiceInfo + ) -> ConfigFlowResult: """Handle a flow initialized by MQTT discovery.""" if self._async_in_progress() or self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -45,7 +46,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") @@ -56,7 +57,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_config( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm the setup.""" errors = {} data = {CONF_DISCOVERY_PREFIX: self._prefix} @@ -85,7 +86,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm the setup.""" data = {CONF_DISCOVERY_PREFIX: self._prefix} diff --git a/homeassistant/components/tautulli/config_flow.py b/homeassistant/components/tautulli/config_flow.py index 532852687da..987f3816f15 100644 --- a/homeassistant/components/tautulli/config_flow.py +++ b/homeassistant/components/tautulli/config_flow.py @@ -7,9 +7,8 @@ from typing import Any from pytautulli import PyTautulli, PyTautulliException, exceptions import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_URL, CONF_VERIFY_SSL -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DEFAULT_NAME, DOMAIN @@ -22,7 +21,7 @@ class TautulliConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} if user_input is not None: @@ -49,13 +48,15 @@ class TautulliConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors or {}, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle a reauthorization flow request.""" return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" errors = {} if user_input is not None and ( diff --git a/homeassistant/components/technove/config_flow.py b/homeassistant/components/technove/config_flow.py index d85fd0ad152..0e4f026ba5c 100644 --- a/homeassistant/components/technove/config_flow.py +++ b/homeassistant/components/technove/config_flow.py @@ -6,9 +6,8 @@ from technove import Station as TechnoVEStation, TechnoVE, TechnoVEConnectionErr import voluptuous as vol from homeassistant.components import onboarding, zeroconf -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_MAC -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN @@ -23,7 +22,7 @@ class TechnoVEConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" errors = {} if user_input is not None: @@ -51,7 +50,7 @@ class TechnoVEConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle zeroconf discovery.""" # Abort quick if the device with provided mac is already configured if mac := discovery_info.properties.get(CONF_MAC): @@ -78,7 +77,7 @@ class TechnoVEConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_zeroconf_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by zeroconf.""" if user_input is not None or not onboarding.async_is_onboarded(self.hass): return self.async_create_entry( diff --git a/homeassistant/components/tedee/config_flow.py b/homeassistant/components/tedee/config_flow.py index 7c8c7b4c3ab..fe8681a7fe4 100644 --- a/homeassistant/components/tedee/config_flow.py +++ b/homeassistant/components/tedee/config_flow.py @@ -12,9 +12,8 @@ from pytedee_async import ( ) import voluptuous as vol -from homeassistant.config_entries import ConfigEntry, ConfigFlow +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import CONF_LOCAL_ACCESS_TOKEN, DOMAIN, NAME @@ -27,7 +26,7 @@ class TedeeConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} @@ -79,7 +78,9 @@ class TedeeConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -88,7 +89,7 @@ class TedeeConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" assert self.reauth_entry diff --git a/homeassistant/components/tellduslive/config_flow.py b/homeassistant/components/tellduslive/config_flow.py index 33910f6ead1..a5b9607b221 100644 --- a/homeassistant/components/tellduslive/config_flow.py +++ b/homeassistant/components/tellduslive/config_flow.py @@ -6,7 +6,7 @@ import os from tellduslive import Session, supports_local_api import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow from homeassistant.const import CONF_HOST from homeassistant.util.json import load_json_object @@ -28,7 +28,7 @@ KEY_TOKEN_SECRET = "token_secret" _LOGGER = logging.getLogger(__name__) -class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class FlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 diff --git a/homeassistant/components/tesla_wall_connector/config_flow.py b/homeassistant/components/tesla_wall_connector/config_flow.py index 5b3cf9bd835..ad8112be4cb 100644 --- a/homeassistant/components/tesla_wall_connector/config_flow.py +++ b/homeassistant/components/tesla_wall_connector/config_flow.py @@ -8,11 +8,10 @@ from tesla_wall_connector import WallConnector from tesla_wall_connector.exceptions import WallConnectorError import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import dhcp +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN, WALLCONNECTOR_DEVICE_NAME, WALLCONNECTOR_SERIAL_NUMBER @@ -37,7 +36,7 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, } -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TeslaWallConnectorConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Tesla Wall Connector.""" VERSION = 1 @@ -48,7 +47,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.ip_address: str | None = None self.serial_number = None - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle dhcp discovery.""" self.ip_address = discovery_info.ip _LOGGER.debug("Discovered Tesla Wall Connector at [%s]", self.ip_address) @@ -89,7 +90,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" data_schema = vol.Schema( {vol.Required(CONF_HOST, default=self.ip_address): str} diff --git a/homeassistant/components/teslemetry/config_flow.py b/homeassistant/components/teslemetry/config_flow.py index 64a279132ad..6c709a9d757 100644 --- a/homeassistant/components/teslemetry/config_flow.py +++ b/homeassistant/components/teslemetry/config_flow.py @@ -11,7 +11,6 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.const import CONF_ACCESS_TOKEN -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN, LOGGER @@ -30,7 +29,7 @@ class TeslemetryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: Mapping[str, Any] | None = None - ) -> FlowResult: + ) -> config_entries.ConfigFlowResult: """Get configuration from the user.""" errors: dict[str, str] = {} if user_input: diff --git a/homeassistant/components/tessie/config_flow.py b/homeassistant/components/tessie/config_flow.py index 97d9d44af70..428cff5d727 100644 --- a/homeassistant/components/tessie/config_flow.py +++ b/homeassistant/components/tessie/config_flow.py @@ -9,10 +9,8 @@ from aiohttp import ClientConnectionError, ClientResponseError from tessie_api import get_state_of_all_vehicles import voluptuous as vol -from homeassistant import config_entries -from homeassistant.config_entries import ConfigEntry +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ACCESS_TOKEN -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN @@ -23,7 +21,7 @@ DESCRIPTION_PLACEHOLDERS = { } -class TessieConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TessieConfigFlow(ConfigFlow, domain=DOMAIN): """Config Tessie API connection.""" VERSION = 1 @@ -34,7 +32,7 @@ class TessieConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: Mapping[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Get configuration from the user.""" errors: dict[str, str] = {} if user_input: @@ -64,7 +62,9 @@ class TessieConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, user_input: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, user_input: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-auth.""" self._reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -73,7 +73,7 @@ class TessieConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: Mapping[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Get update API Key from the user.""" errors: dict[str, str] = {} assert self._reauth_entry diff --git a/homeassistant/components/thermobeacon/config_flow.py b/homeassistant/components/thermobeacon/config_flow.py index 864e9532c0e..b635a28dc8c 100644 --- a/homeassistant/components/thermobeacon/config_flow.py +++ b/homeassistant/components/thermobeacon/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class ThermoBeaconConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class ThermoBeaconConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class ThermoBeaconConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/thermopro/config_flow.py b/homeassistant/components/thermopro/config_flow.py index f7e03aff685..02335ef712e 100644 --- a/homeassistant/components/thermopro/config_flow.py +++ b/homeassistant/components/thermopro/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class ThermoProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class ThermoProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class ThermoProConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/thread/config_flow.py b/homeassistant/components/thread/config_flow.py index b294dfa51e7..2a2062419f7 100644 --- a/homeassistant/components/thread/config_flow.py +++ b/homeassistant/components/thread/config_flow.py @@ -4,8 +4,7 @@ from __future__ import annotations from typing import Any from homeassistant.components import onboarding, zeroconf -from homeassistant.config_entries import ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from .const import DOMAIN @@ -17,28 +16,28 @@ class ThreadConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_import( self, import_data: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Set up by import from async_setup.""" await self._async_handle_discovery_without_unique_id() return self.async_create_entry(title="Thread", data={}) async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Set up by import from async_setup.""" await self._async_handle_discovery_without_unique_id() return self.async_create_entry(title="Thread", data={}) async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Set up because the user has border routers.""" await self._async_handle_discovery_without_unique_id() return await self.async_step_confirm() async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm the setup.""" if user_input is not None or not onboarding.async_is_onboarded(self.hass): return self.async_create_entry(title="Thread", data={}) diff --git a/homeassistant/components/tibber/config_flow.py b/homeassistant/components/tibber/config_flow.py index 8c926c5cc81..10b0d899de2 100644 --- a/homeassistant/components/tibber/config_flow.py +++ b/homeassistant/components/tibber/config_flow.py @@ -7,9 +7,8 @@ import aiohttp import tibber import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ACCESS_TOKEN -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import DOMAIN @@ -21,14 +20,14 @@ ERR_TOKEN = "invalid_access_token" TOKEN_URL = "https://developer.tibber.com/settings/access-token" -class TibberConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TibberConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Tibber integration.""" VERSION = 1 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" self._async_abort_entries_match() diff --git a/homeassistant/components/tile/config_flow.py b/homeassistant/components/tile/config_flow.py index 3ba1dc411ae..10bc51ae459 100644 --- a/homeassistant/components/tile/config_flow.py +++ b/homeassistant/components/tile/config_flow.py @@ -8,9 +8,8 @@ from pytile import async_login from pytile.errors import InvalidAuthError, TileError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_PASSWORD, CONF_USERNAME -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client from .const import DOMAIN, LOGGER @@ -29,7 +28,7 @@ STEP_USER_SCHEMA = vol.Schema( ) -class TileFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class TileFlowHandler(ConfigFlow, domain=DOMAIN): """Handle a Tile config flow.""" VERSION = 1 @@ -39,7 +38,7 @@ class TileFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self._password: str | None = None self._username: str | None = None - async def _async_verify(self, step_id: str, schema: vol.Schema) -> FlowResult: + async def _async_verify(self, step_id: str, schema: vol.Schema) -> ConfigFlowResult: """Attempt to authenticate the provided credentials.""" assert self._username assert self._password @@ -71,18 +70,22 @@ class TileFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title=self._username, data=data) - async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult: + async def async_step_import( + self, import_config: dict[str, Any] + ) -> ConfigFlowResult: """Import a config entry from configuration.yaml.""" return await self.async_step_user(import_config) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" self._username = entry_data[CONF_USERNAME] return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle re-auth completion.""" if not user_input: return self.async_show_form( @@ -95,7 +98,7 @@ class TileFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the start of the config flow.""" if not user_input: return self.async_show_form(step_id="user", data_schema=STEP_USER_SCHEMA) diff --git a/homeassistant/components/tilt_ble/config_flow.py b/homeassistant/components/tilt_ble/config_flow.py index d534622eb7b..810a4226117 100644 --- a/homeassistant/components/tilt_ble/config_flow.py +++ b/homeassistant/components/tilt_ble/config_flow.py @@ -10,9 +10,8 @@ from homeassistant.components.bluetooth import ( BluetoothServiceInfoBleak, async_discovered_service_info, ) -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ADDRESS -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -30,7 +29,7 @@ class TiltConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth( self, discovery_info: BluetoothServiceInfoBleak - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the bluetooth discovery step.""" await self.async_set_unique_id(discovery_info.address) self._abort_if_unique_id_configured() @@ -43,7 +42,7 @@ class TiltConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_bluetooth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device = self._discovered_device @@ -62,7 +61,7 @@ class TiltConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step to pick discovered device.""" if user_input is not None: address = user_input[CONF_ADDRESS] diff --git a/homeassistant/components/todoist/config_flow.py b/homeassistant/components/todoist/config_flow.py index 94b4ad31826..745f1775e87 100644 --- a/homeassistant/components/todoist/config_flow.py +++ b/homeassistant/components/todoist/config_flow.py @@ -8,9 +8,8 @@ from requests.exceptions import HTTPError from todoist_api_python.api_async import TodoistAPIAsync import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_TOKEN -from homeassistant.data_entry_flow import FlowResult from .const import DOMAIN @@ -25,14 +24,14 @@ STEP_USER_DATA_SCHEMA = vol.Schema( ) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TodoistConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for todoist.""" VERSION = 1 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") diff --git a/homeassistant/components/tolo/config_flow.py b/homeassistant/components/tolo/config_flow.py index 14304f6653e..ed15030b372 100644 --- a/homeassistant/components/tolo/config_flow.py +++ b/homeassistant/components/tolo/config_flow.py @@ -10,9 +10,8 @@ from tololib.errors import ResponseTimedOutError import voluptuous as vol from homeassistant.components import dhcp -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.device_registry import format_mac from .const import DEFAULT_NAME, DEFAULT_RETRY_COUNT, DEFAULT_RETRY_TIMEOUT, DOMAIN @@ -40,7 +39,7 @@ class ToloSaunaConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} @@ -64,7 +63,9 @@ class ToloSaunaConfigFlow(ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle a flow initialized by discovery.""" await self.async_set_unique_id(format_mac(discovery_info.macaddress)) self._abort_if_unique_id_configured({CONF_HOST: discovery_info.ip}) @@ -81,7 +82,7 @@ class ToloSaunaConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle user-confirmation of discovered node.""" if user_input is not None: self._async_abort_entries_match({CONF_HOST: self._discovered_host}) diff --git a/homeassistant/components/tomorrowio/config_flow.py b/homeassistant/components/tomorrowio/config_flow.py index aece537c867..e23f90b2e3b 100644 --- a/homeassistant/components/tomorrowio/config_flow.py +++ b/homeassistant/components/tomorrowio/config_flow.py @@ -13,8 +13,13 @@ from pytomorrowio.exceptions import ( from pytomorrowio.pytomorrowio import TomorrowioV4 import voluptuous as vol -from homeassistant import config_entries, core from homeassistant.components.zone import async_active_zone +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import ( CONF_API_KEY, CONF_FRIENDLY_NAME, @@ -24,7 +29,6 @@ from homeassistant.const import ( CONF_NAME, ) from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.selector import LocationSelector, LocationSelectorConfig @@ -40,7 +44,7 @@ _LOGGER = logging.getLogger(__name__) def _get_config_schema( - hass: core.HomeAssistant, + hass: HomeAssistant, source: str | None, input_dict: dict[str, Any] | None = None, ) -> vol.Schema: @@ -83,16 +87,16 @@ def _get_unique_id(hass: HomeAssistant, input_dict: dict[str, Any]): ) -class TomorrowioOptionsConfigFlow(config_entries.OptionsFlow): +class TomorrowioOptionsConfigFlow(OptionsFlow): """Handle Tomorrow.io options.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize Tomorrow.io options flow.""" self._config_entry = config_entry async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the Tomorrow.io options.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) @@ -109,7 +113,7 @@ class TomorrowioOptionsConfigFlow(config_entries.OptionsFlow): ) -class TomorrowioConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TomorrowioConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Tomorrow.io Weather API.""" VERSION = 1 @@ -117,14 +121,14 @@ class TomorrowioConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> TomorrowioOptionsConfigFlow: """Get the options flow for this handler.""" return TomorrowioOptionsConfigFlow(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors = {} if user_input is not None: diff --git a/homeassistant/components/toon/config_flow.py b/homeassistant/components/toon/config_flow.py index 5c98e35bead..4077d352db9 100644 --- a/homeassistant/components/toon/config_flow.py +++ b/homeassistant/components/toon/config_flow.py @@ -7,7 +7,7 @@ from typing import Any from toonapi import Agreement, Toon, ToonError import voluptuous as vol -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigFlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.config_entry_oauth2_flow import AbstractOAuth2FlowHandler @@ -28,7 +28,7 @@ class ToonFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN): """Return logger.""" return logging.getLogger(__name__) - async def async_oauth_create_entry(self, data: dict[str, Any]) -> FlowResult: + async def async_oauth_create_entry(self, data: dict[str, Any]) -> ConfigFlowResult: """Test connection and load up agreements.""" self.data = data @@ -48,7 +48,7 @@ class ToonFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN): async def async_step_import( self, config: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Start a configuration flow based on imported data. This step is merely here to trigger "discovery" when the `toon` @@ -65,7 +65,7 @@ class ToonFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN): async def async_step_agreement( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Select Toon agreement to add.""" if len(self.agreements) == 1: return await self._create_entry(self.agreements[0]) @@ -86,7 +86,7 @@ class ToonFlowHandler(AbstractOAuth2FlowHandler, domain=DOMAIN): agreement_index = agreements_list.index(user_input[CONF_AGREEMENT]) return await self._create_entry(self.agreements[agreement_index]) - async def _create_entry(self, agreement: Agreement) -> FlowResult: + async def _create_entry(self, agreement: Agreement) -> ConfigFlowResult: if CONF_MIGRATE in self.context: await self.hass.config_entries.async_remove(self.context[CONF_MIGRATE]) diff --git a/homeassistant/components/totalconnect/config_flow.py b/homeassistant/components/totalconnect/config_flow.py index 8d35506af0f..d7cc3c237a3 100644 --- a/homeassistant/components/totalconnect/config_flow.py +++ b/homeassistant/components/totalconnect/config_flow.py @@ -8,17 +8,21 @@ from total_connect_client.client import TotalConnectClient from total_connect_client.exceptions import AuthenticationError import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_LOCATION, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from .const import AUTO_BYPASS, CONF_USERCODES, DOMAIN PASSWORD_DATA_SCHEMA = vol.Schema({vol.Required(CONF_PASSWORD): str}) -class TotalConnectConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TotalConnectConfigFlow(ConfigFlow, domain=DOMAIN): """Total Connect config flow.""" VERSION = 1 @@ -125,7 +129,9 @@ class TotalConnectConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): description_placeholders={"location_id": location_for_user}, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an authentication error or no usercode.""" self.username = entry_data[CONF_USERNAME] self.usercodes = entry_data[CONF_USERCODES] @@ -173,16 +179,16 @@ class TotalConnectConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> TotalConnectOptionsFlowHandler: """Get options flow.""" return TotalConnectOptionsFlowHandler(config_entry) -class TotalConnectOptionsFlowHandler(config_entries.OptionsFlow): +class TotalConnectOptionsFlowHandler(OptionsFlow): """TotalConnect options flow handler.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize options flow.""" self.config_entry = config_entry diff --git a/homeassistant/components/tplink/config_flow.py b/homeassistant/components/tplink/config_flow.py index 643748f175e..1d818da868b 100644 --- a/homeassistant/components/tplink/config_flow.py +++ b/homeassistant/components/tplink/config_flow.py @@ -15,9 +15,14 @@ from kasa import ( ) import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import dhcp -from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry, ConfigEntryState +from homeassistant.config_entries import ( + SOURCE_REAUTH, + ConfigEntry, + ConfigEntryState, + ConfigFlow, + ConfigFlowResult, +) from homeassistant.const import ( CONF_ALIAS, CONF_DEVICE, @@ -28,7 +33,6 @@ from homeassistant.const import ( CONF_USERNAME, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import device_registry as dr from homeassistant.helpers.typing import DiscoveryInfoType @@ -46,7 +50,7 @@ STEP_AUTH_DATA_SCHEMA = vol.Schema( ) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TPLinkConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for tplink.""" VERSION = 1 @@ -58,7 +62,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self._discovered_devices: dict[str, SmartDevice] = {} self._discovered_device: SmartDevice | None = None - async def async_step_dhcp(self, discovery_info: dhcp.DhcpServiceInfo) -> FlowResult: + async def async_step_dhcp( + self, discovery_info: dhcp.DhcpServiceInfo + ) -> ConfigFlowResult: """Handle discovery via dhcp.""" return await self._async_handle_discovery( discovery_info.ip, dr.format_mac(discovery_info.macaddress) @@ -66,7 +72,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_integration_discovery( self, discovery_info: DiscoveryInfoType - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle integration discovery.""" return await self._async_handle_discovery( discovery_info[CONF_HOST], @@ -77,7 +83,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): @callback def _update_config_if_entry_in_setup_error( self, entry: ConfigEntry, host: str, config: dict - ) -> FlowResult | None: + ) -> ConfigFlowResult | None: """If discovery encounters a device that is in SETUP_ERROR or SETUP_RETRY update the device config.""" if entry.state not in ( ConfigEntryState.SETUP_ERROR, @@ -96,7 +102,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def _async_handle_discovery( self, host: str, formatted_mac: str, config: dict | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle any discovery.""" current_entry = await self.async_set_unique_id( formatted_mac, raise_on_progress=False @@ -131,7 +137,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_discovery_auth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that auth is required.""" assert self._discovered_device is not None errors = {} @@ -190,7 +196,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_discovery_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None if user_input is not None: @@ -205,7 +211,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} placeholders: dict[str, str] = {} @@ -237,7 +243,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user_auth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that auth is required.""" errors: dict[str, str] = {} host = self.context[CONF_HOST] @@ -272,7 +278,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_pick_device( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the step to pick discovered device.""" if user_input is not None: mac = user_input[CONF_DEVICE] @@ -332,7 +338,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): _config_entries.flow.async_abort(flow["flow_id"]) @callback - def _async_create_entry_from_device(self, device: SmartDevice) -> FlowResult: + def _async_create_entry_from_device(self, device: SmartDevice) -> ConfigFlowResult: """Create a config entry from a smart device.""" self._abort_if_unique_id_configured(updates={CONF_HOST: device.host}) return self.async_create_entry( @@ -401,7 +407,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) return self._discovered_device - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Start the reauthentication flow if the device needs updated credentials.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -410,7 +418,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" errors: dict[str, str] = {} placeholders: dict[str, str] = {} diff --git a/homeassistant/components/tplink_omada/config_flow.py b/homeassistant/components/tplink_omada/config_flow.py index e49e8ccf657..0071e5cda17 100644 --- a/homeassistant/components/tplink_omada/config_flow.py +++ b/homeassistant/components/tplink_omada/config_flow.py @@ -18,10 +18,9 @@ from tplink_omada_client.exceptions import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME, CONF_VERIFY_SSL from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import selector from homeassistant.helpers.aiohttp_client import ( async_create_clientsession, @@ -92,7 +91,7 @@ async def _validate_input(hass: HomeAssistant, data: dict[str, Any]) -> HubInfo: return HubInfo(controller_id, name, sites) -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TpLinkOmadaConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for TP-Link Omada.""" VERSION = 1 @@ -105,7 +104,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} @@ -130,7 +129,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_site( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle step to select site to manage.""" if user_input is None: @@ -159,14 +158,16 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_create_entry(title=display_name, data=self._omada_opts) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self._omada_opts = dict(entry_data) return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/traccar_server/config_flow.py b/homeassistant/components/traccar_server/config_flow.py index a2a7daaaa98..86b0cfa8779 100644 --- a/homeassistant/components/traccar_server/config_flow.py +++ b/homeassistant/components/traccar_server/config_flow.py @@ -17,7 +17,6 @@ from homeassistant.const import ( CONF_VERIFY_SSL, ) from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.schema_config_entry_flow import ( SchemaFlowFormStep, @@ -130,7 +129,7 @@ class TraccarServerConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None, - ) -> FlowResult: + ) -> config_entries.ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} if user_input is not None: @@ -160,7 +159,9 @@ class TraccarServerConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_import(self, import_info: Mapping[str, Any]) -> FlowResult: + async def async_step_import( + self, import_info: Mapping[str, Any] + ) -> config_entries.ConfigFlowResult: """Import an entry.""" configured_port = str(import_info[CONF_PORT]) self._async_abort_entries_match( diff --git a/homeassistant/components/tractive/config_flow.py b/homeassistant/components/tractive/config_flow.py index ba42aeb600d..3299b2981a8 100644 --- a/homeassistant/components/tractive/config_flow.py +++ b/homeassistant/components/tractive/config_flow.py @@ -8,10 +8,9 @@ from typing import Any import aiotractive import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_EMAIL, CONF_PASSWORD from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from homeassistant.exceptions import HomeAssistantError from .const import DOMAIN @@ -40,14 +39,14 @@ async def validate_input(hass: HomeAssistant, data: dict[str, Any]) -> dict[str, return {"title": data[CONF_EMAIL], "user_id": user_id} -class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TractiveConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for tractive.""" VERSION = 1 async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" if user_input is None: return self.async_show_form(step_id="user", data_schema=USER_DATA_SCHEMA) @@ -70,13 +69,15 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): step_id="user", data_schema=USER_DATA_SCHEMA, errors=errors ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle configuration by re-auth.""" return await self.async_step_reauth_confirm() async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Dialog that informs the user that reauth is required.""" errors = {} diff --git a/homeassistant/components/tradfri/config_flow.py b/homeassistant/components/tradfri/config_flow.py index 9acdfb36a5d..0a2b6eaef2c 100644 --- a/homeassistant/components/tradfri/config_flow.py +++ b/homeassistant/components/tradfri/config_flow.py @@ -9,11 +9,10 @@ from pytradfri import Gateway, RequestError from pytradfri.api.aiocoap_api import APIFactory import voluptuous as vol -from homeassistant import config_entries from homeassistant.components import zeroconf +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant -from homeassistant.data_entry_flow import FlowResult from .const import CONF_GATEWAY_ID, CONF_IDENTITY, CONF_KEY, DOMAIN @@ -29,7 +28,7 @@ class AuthError(Exception): self.code = code -class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class FlowHandler(ConfigFlow, domain=DOMAIN): """Handle a config flow.""" VERSION = 1 @@ -40,13 +39,13 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" return await self.async_step_auth() async def async_step_auth( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the authentication with a gateway.""" errors: dict[str, str] = {} @@ -82,7 +81,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_homekit( self, discovery_info: zeroconf.ZeroconfServiceInfo - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle homekit discovery.""" await self.async_set_unique_id( discovery_info.properties[zeroconf.ATTR_PROPERTIES_ID] @@ -107,7 +106,7 @@ class FlowHandler(config_entries.ConfigFlow, domain=DOMAIN): self._host = host return await self.async_step_auth() - async def _entry_from_data(self, data: dict[str, Any]) -> FlowResult: + async def _entry_from_data(self, data: dict[str, Any]) -> ConfigFlowResult: """Create an entry from data.""" host = data[CONF_HOST] gateway_id = data[CONF_GATEWAY_ID] diff --git a/homeassistant/components/trafikverket_camera/config_flow.py b/homeassistant/components/trafikverket_camera/config_flow.py index 9db27eda622..566041ec790 100644 --- a/homeassistant/components/trafikverket_camera/config_flow.py +++ b/homeassistant/components/trafikverket_camera/config_flow.py @@ -8,9 +8,8 @@ from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, Unkn from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_ID, CONF_LOCATION -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.selector import ( SelectOptionDict, @@ -23,12 +22,12 @@ from homeassistant.helpers.selector import ( from .const import DOMAIN -class TVCameraConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TVCameraConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Trafikverket Camera integration.""" VERSION = 3 - entry: config_entries.ConfigEntry | None + entry: ConfigEntry | None cameras: list[CameraInfo] api_key: str @@ -52,7 +51,9 @@ class TVCameraConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return (errors, cameras) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-authentication with Trafikverket.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -60,7 +61,7 @@ class TVCameraConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm re-authentication with Trafikverket.""" errors: dict[str, str] = {} @@ -93,7 +94,7 @@ class TVCameraConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors: dict[str, str] = {} @@ -128,7 +129,7 @@ class TVCameraConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_multiple_cameras( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle when multiple cameras.""" if user_input: diff --git a/homeassistant/components/trafikverket_ferry/config_flow.py b/homeassistant/components/trafikverket_ferry/config_flow.py index 2fb6cfb642a..007e1cd72c1 100644 --- a/homeassistant/components/trafikverket_ferry/config_flow.py +++ b/homeassistant/components/trafikverket_ferry/config_flow.py @@ -8,9 +8,8 @@ from pytrafikverket import TrafikverketFerry from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY, CONF_NAME, CONF_WEEKDAY, WEEKDAYS -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import selector from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -44,12 +43,12 @@ DATA_SCHEMA_REAUTH = vol.Schema( ) -class TVFerryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TVFerryConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Trafikverket Ferry integration.""" VERSION = 1 - entry: config_entries.ConfigEntry | None + entry: ConfigEntry | None async def validate_input( self, api_key: str, ferry_from: str, ferry_to: str @@ -59,7 +58,9 @@ class TVFerryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ferry_api = TrafikverketFerry(web_session, api_key) await ferry_api.async_get_next_ferry_stop(ferry_from, ferry_to) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-authentication with Trafikverket.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -67,7 +68,7 @@ class TVFerryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm re-authentication with Trafikverket.""" errors: dict[str, str] = {} @@ -104,7 +105,7 @@ class TVFerryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/trafikverket_train/config_flow.py b/homeassistant/components/trafikverket_train/config_flow.py index df05942add1..5022921c310 100644 --- a/homeassistant/components/trafikverket_train/config_flow.py +++ b/homeassistant/components/trafikverket_train/config_flow.py @@ -16,10 +16,14 @@ from pytrafikverket.exceptions import ( ) import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlowWithConfigEntry, +) from homeassistant.const import CONF_API_KEY, CONF_NAME, CONF_WEEKDAY, WEEKDAYS from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.selector import ( @@ -116,22 +120,24 @@ async def validate_input( return errors -class TVTrainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TVTrainConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Trafikverket Train integration.""" VERSION = 1 - entry: config_entries.ConfigEntry | None + entry: ConfigEntry | None @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> TVTrainOptionsFlowHandler: """Get the options flow for this handler.""" return TVTrainOptionsFlowHandler(config_entry) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-authentication with Trafikverket.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -139,7 +145,7 @@ class TVTrainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm re-authentication with Trafikverket.""" errors: dict[str, str] = {} @@ -175,7 +181,7 @@ class TVTrainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the user step.""" errors: dict[str, str] = {} @@ -231,12 +237,12 @@ class TVTrainConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) -class TVTrainOptionsFlowHandler(config_entries.OptionsFlowWithConfigEntry): +class TVTrainOptionsFlowHandler(OptionsFlowWithConfigEntry): """Handle Trafikverket Train options.""" async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage Trafikverket Train options.""" errors: dict[str, Any] = {} diff --git a/homeassistant/components/trafikverket_weatherstation/config_flow.py b/homeassistant/components/trafikverket_weatherstation/config_flow.py index 89cbd373665..9de085bcddd 100644 --- a/homeassistant/components/trafikverket_weatherstation/config_flow.py +++ b/homeassistant/components/trafikverket_weatherstation/config_flow.py @@ -12,21 +12,20 @@ from pytrafikverket.exceptions import ( from pytrafikverket.trafikverket_weather import TrafikverketWeather import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_API_KEY -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from .const import CONF_STATION, DOMAIN -class TVWeatherConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TVWeatherConfigFlow(ConfigFlow, domain=DOMAIN): """Handle a config flow for Trafikverket Weatherstation integration.""" VERSION = 1 - entry: config_entries.ConfigEntry | None = None + entry: ConfigEntry | None = None async def validate_input(self, sensor_api: str, station: str) -> None: """Validate input from user input.""" @@ -36,7 +35,7 @@ class TVWeatherConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" errors = {} @@ -75,7 +74,9 @@ class TVWeatherConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Handle re-authentication with Trafikverket.""" self.entry = self.hass.config_entries.async_get_entry(self.context["entry_id"]) @@ -83,7 +84,7 @@ class TVWeatherConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm re-authentication with Trafikverket.""" errors: dict[str, str] = {} diff --git a/homeassistant/components/transmission/config_flow.py b/homeassistant/components/transmission/config_flow.py index a987233fef0..9aed54c3e71 100644 --- a/homeassistant/components/transmission/config_flow.py +++ b/homeassistant/components/transmission/config_flow.py @@ -6,10 +6,14 @@ from typing import Any import voluptuous as vol -from homeassistant import config_entries +from homeassistant.config_entries import ( + ConfigEntry, + ConfigFlow, + ConfigFlowResult, + OptionsFlow, +) from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME from homeassistant.core import callback -from homeassistant.data_entry_flow import FlowResult from . import get_api from .const import ( @@ -34,23 +38,23 @@ DATA_SCHEMA = vol.Schema( ) -class TransmissionFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): +class TransmissionFlowHandler(ConfigFlow, domain=DOMAIN): """Handle Tansmission config flow.""" VERSION = 1 - _reauth_entry: config_entries.ConfigEntry | None + _reauth_entry: ConfigEntry | None @staticmethod @callback def async_get_options_flow( - config_entry: config_entries.ConfigEntry, + config_entry: ConfigEntry, ) -> TransmissionOptionsFlowHandler: """Get the options flow for this handler.""" return TransmissionOptionsFlowHandler(config_entry) async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" errors = {} @@ -79,7 +83,9 @@ class TransmissionFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors=errors, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self._reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -88,7 +94,7 @@ class TransmissionFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_reauth_confirm( self, user_input: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" errors = {} assert self._reauth_entry @@ -122,16 +128,16 @@ class TransmissionFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) -class TransmissionOptionsFlowHandler(config_entries.OptionsFlow): +class TransmissionOptionsFlowHandler(OptionsFlow): """Handle Transmission client options.""" - def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + def __init__(self, config_entry: ConfigEntry) -> None: """Initialize Transmission options flow.""" self.config_entry = config_entry async def async_step_init( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Manage the Transmission options.""" if user_input is not None: return self.async_create_entry(title="", data=user_input) diff --git a/homeassistant/components/tuya/config_flow.py b/homeassistant/components/tuya/config_flow.py index e0ac5375b00..397da0618fb 100644 --- a/homeassistant/components/tuya/config_flow.py +++ b/homeassistant/components/tuya/config_flow.py @@ -7,8 +7,7 @@ from typing import Any from tuya_sharing import LoginControl import voluptuous as vol -from homeassistant.config_entries import ConfigEntry, ConfigFlow -from homeassistant.data_entry_flow import FlowResult +from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult from homeassistant.helpers import selector from .const import ( @@ -40,7 +39,7 @@ class TuyaConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Step user.""" errors = {} placeholders = {} @@ -75,7 +74,7 @@ class TuyaConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_scan( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Step scan.""" if user_input is None: return self.async_show_form( @@ -146,7 +145,7 @@ class TuyaConfigFlow(ConfigFlow, domain=DOMAIN): data=entry_data, ) - async def async_step_reauth(self, _: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth(self, _: Mapping[str, Any]) -> ConfigFlowResult: """Handle initiation of re-authentication with Tuya.""" self.__reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -163,7 +162,7 @@ class TuyaConfigFlow(ConfigFlow, domain=DOMAIN): async def async_step_reauth_user_code( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle re-authentication with a Tuya.""" errors = {} placeholders = {} diff --git a/homeassistant/components/twentemilieu/config_flow.py b/homeassistant/components/twentemilieu/config_flow.py index 7a00222fe9b..160aecef947 100644 --- a/homeassistant/components/twentemilieu/config_flow.py +++ b/homeassistant/components/twentemilieu/config_flow.py @@ -10,9 +10,8 @@ from twentemilieu import ( ) import voluptuous as vol -from homeassistant.config_entries import ConfigFlow +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_ID -from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import CONF_HOUSE_LETTER, CONF_HOUSE_NUMBER, CONF_POST_CODE, DOMAIN @@ -25,7 +24,7 @@ class TwenteMilieuFlowHandler(ConfigFlow, domain=DOMAIN): async def _show_setup_form( self, errors: dict[str, str] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Show the setup form to the user.""" return self.async_show_form( step_id="user", @@ -41,7 +40,7 @@ class TwenteMilieuFlowHandler(ConfigFlow, domain=DOMAIN): async def async_step_user( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" if user_input is None: return await self._show_setup_form(user_input) diff --git a/homeassistant/components/twinkly/config_flow.py b/homeassistant/components/twinkly/config_flow.py index 6d0785f648e..17acb4f165e 100644 --- a/homeassistant/components/twinkly/config_flow.py +++ b/homeassistant/components/twinkly/config_flow.py @@ -8,8 +8,8 @@ from aiohttp import ClientError from ttls.client import Twinkly from voluptuous import Required, Schema -from homeassistant import config_entries, data_entry_flow from homeassistant.components import dhcp +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_HOST, CONF_ID, CONF_MODEL, CONF_NAME from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -18,7 +18,7 @@ from .const import DEV_ID, DEV_MODEL, DEV_NAME, DOMAIN _LOGGER = logging.getLogger(__name__) -class TwinklyConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): +class TwinklyConfigFlow(ConfigFlow, domain=DOMAIN): """Handle twinkly config flow.""" VERSION = 1 @@ -53,7 +53,7 @@ class TwinklyConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): async def async_step_dhcp( self, discovery_info: dhcp.DhcpServiceInfo - ) -> data_entry_flow.FlowResult: + ) -> ConfigFlowResult: """Handle dhcp discovery for twinkly.""" self._async_abort_entries_match({CONF_HOST: discovery_info.ip}) device_info = await Twinkly( @@ -65,9 +65,7 @@ class TwinklyConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self._discovered_device = (device_info, discovery_info.ip) return await self.async_step_discovery_confirm() - async def async_step_discovery_confirm( - self, user_input=None - ) -> data_entry_flow.FlowResult: + async def async_step_discovery_confirm(self, user_input=None) -> ConfigFlowResult: """Confirm discovery.""" assert self._discovered_device is not None device_info, host = self._discovered_device @@ -87,7 +85,7 @@ class TwinklyConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): def _create_entry_from_device( self, device_info: dict[str, Any], host: str - ) -> data_entry_flow.FlowResult: + ) -> ConfigFlowResult: """Create entry from device data.""" return self.async_create_entry( title=device_info[DEV_NAME], diff --git a/homeassistant/components/twitch/config_flow.py b/homeassistant/components/twitch/config_flow.py index 128abf756fa..b8be2ac6e5a 100644 --- a/homeassistant/components/twitch/config_flow.py +++ b/homeassistant/components/twitch/config_flow.py @@ -9,10 +9,10 @@ from twitchAPI.helper import first from twitchAPI.twitch import Twitch from twitchAPI.type import AuthScope, InvalidTokenException -from homeassistant.config_entries import ConfigEntry +from homeassistant.config_entries import ConfigEntry, ConfigFlowResult from homeassistant.const import CONF_ACCESS_TOKEN, CONF_CLIENT_ID, CONF_TOKEN from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN -from homeassistant.data_entry_flow import AbortFlow, FlowResult +from homeassistant.data_entry_flow import AbortFlow from homeassistant.helpers import config_entry_oauth2_flow from homeassistant.helpers.config_entry_oauth2_flow import LocalOAuth2Implementation from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue @@ -46,7 +46,7 @@ class OAuth2FlowHandler( async def async_oauth_create_entry( self, data: dict[str, Any], - ) -> FlowResult: + ) -> ConfigFlowResult: """Handle the initial step.""" implementation = cast( LocalOAuth2Implementation, @@ -104,7 +104,9 @@ class OAuth2FlowHandler( description_placeholders={"title": self.reauth_entry.title}, ) - async def async_step_reauth(self, entry_data: Mapping[str, Any]) -> FlowResult: + async def async_step_reauth( + self, entry_data: Mapping[str, Any] + ) -> ConfigFlowResult: """Perform reauth upon an API authentication error.""" self.reauth_entry = self.hass.config_entries.async_get_entry( self.context["entry_id"] @@ -113,13 +115,13 @@ class OAuth2FlowHandler( async def async_step_reauth_confirm( self, user_input: dict[str, Any] | None = None - ) -> FlowResult: + ) -> ConfigFlowResult: """Confirm reauth dialog.""" if user_input is None: return self.async_show_form(step_id="reauth_confirm") return await self.async_step_user() - async def async_step_import(self, config: dict[str, Any]) -> FlowResult: + async def async_step_import(self, config: dict[str, Any]) -> ConfigFlowResult: """Import from yaml.""" client = await Twitch( app_id=config[CONF_CLIENT_ID],