diff --git a/homeassistant/components/cielo_home/strings.json b/homeassistant/components/cielo_home/strings.json index a7dba1479250..937550bcfadb 100644 --- a/homeassistant/components/cielo_home/strings.json +++ b/homeassistant/components/cielo_home/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/deako/strings.json b/homeassistant/components/deako/strings.json index 088e85a726d2..edd1785d55ea 100644 --- a/homeassistant/components/deako/strings.json +++ b/homeassistant/components/deako/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Please confirm setting up the Deako integration" diff --git a/homeassistant/components/dialogflow/strings.json b/homeassistant/components/dialogflow/strings.json index 74333f7690f7..c2fcc78bac0f 100644 --- a/homeassistant/components/dialogflow/strings.json +++ b/homeassistant/components/dialogflow/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to the [webhook service of Dialogflow]({dialogflow_url}) and update the webhook with following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) for further details.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/downloader/strings.json b/homeassistant/components/downloader/strings.json index 0b34e6e0ba45..da8816a052f3 100644 --- a/homeassistant/components/downloader/strings.json +++ b/homeassistant/components/downloader/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "directory_does_not_exist": "The directory could not be reached. Please check your settings." }, diff --git a/homeassistant/components/dsmr_reader/strings.json b/homeassistant/components/dsmr_reader/strings.json index caeca6052c34..ca091eefdc12 100644 --- a/homeassistant/components/dsmr_reader/strings.json +++ b/homeassistant/components/dsmr_reader/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Make sure to configure the 'split topic' data sources in DSMR Reader." diff --git a/homeassistant/components/ecobee/strings.json b/homeassistant/components/ecobee/strings.json index b8310f9b2557..50f8ead0ad48 100644 --- a/homeassistant/components/ecobee/strings.json +++ b/homeassistant/components/ecobee/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/escea/strings.json b/homeassistant/components/escea/strings.json index 83e561d467d9..6f6892035a0c 100644 --- a/homeassistant/components/escea/strings.json +++ b/homeassistant/components/escea/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Do you want to set up an Escea fireplace?" diff --git a/homeassistant/components/essent/strings.json b/homeassistant/components/essent/strings.json index 1b6f692a697c..ed5dac8607ac 100644 --- a/homeassistant/components/essent/strings.json +++ b/homeassistant/components/essent/strings.json @@ -3,7 +3,6 @@ "abort": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_data": "Received invalid data from Essent", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "step": { diff --git a/homeassistant/components/fastdotcom/strings.json b/homeassistant/components/fastdotcom/strings.json index 1efed4a1b621..72514458b844 100644 --- a/homeassistant/components/fastdotcom/strings.json +++ b/homeassistant/components/fastdotcom/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "user": { "description": "Do you want to start the setup? The initial setup will take about 30-40 seconds." diff --git a/homeassistant/components/fjaraskupan/strings.json b/homeassistant/components/fjaraskupan/strings.json index 70343f151df1..c008f3410bac 100644 --- a/homeassistant/components/fjaraskupan/strings.json +++ b/homeassistant/components/fjaraskupan/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Do you want to set up Fjäråskupan?" diff --git a/homeassistant/components/generic/strings.json b/homeassistant/components/generic/strings.json index 58a460e36560..9d182ac9eb52 100644 --- a/homeassistant/components/generic/strings.json +++ b/homeassistant/components/generic/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "already_exists": "A camera with these URL settings already exists.", "invalid_still_image": "URL did not return a valid still image", diff --git a/homeassistant/components/geofency/strings.json b/homeassistant/components/geofency/strings.json index 90b1a8779428..e14e6cec4a4e 100644 --- a/homeassistant/components/geofency/strings.json +++ b/homeassistant/components/geofency/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to the webhook feature in Geofency and update the webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/govee_light_local/strings.json b/homeassistant/components/govee_light_local/strings.json index 18873d294a51..a852fdc0171e 100644 --- a/homeassistant/components/govee_light_local/strings.json +++ b/homeassistant/components/govee_light_local/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/gpslogger/strings.json b/homeassistant/components/gpslogger/strings.json index 972fd4952b6a..28952b9525ef 100644 --- a/homeassistant/components/gpslogger/strings.json +++ b/homeassistant/components/gpslogger/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to the webhook feature in GPSLogger and update the webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/gree/strings.json b/homeassistant/components/gree/strings.json index 1a68177c6bb9..136923694748 100644 --- a/homeassistant/components/gree/strings.json +++ b/homeassistant/components/gree/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/hisense_aehw4a1/strings.json b/homeassistant/components/hisense_aehw4a1/strings.json index c29a0fb6ce68..2172bf8061cb 100644 --- a/homeassistant/components/hisense_aehw4a1/strings.json +++ b/homeassistant/components/hisense_aehw4a1/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Do you want to set up Hisense AEH-W4A1?" diff --git a/homeassistant/components/ifttt/strings.json b/homeassistant/components/ifttt/strings.json index fc1ff7b05342..4030480c9235 100644 --- a/homeassistant/components/ifttt/strings.json +++ b/homeassistant/components/ifttt/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to the \"Make a web request\" action from the [IFTTT webhook applet]({applet_url}) and update the webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/ios/strings.json b/homeassistant/components/ios/strings.json index 1fb7ac74aae6..5e86ffe943fa 100644 --- a/homeassistant/components/ios/strings.json +++ b/homeassistant/components/ios/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/laundrify/strings.json b/homeassistant/components/laundrify/strings.json index 88c9752dc59e..d1b273b151fc 100644 --- a/homeassistant/components/laundrify/strings.json +++ b/homeassistant/components/laundrify/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/locative/strings.json b/homeassistant/components/locative/strings.json index e4dcac05d187..a6d9caa78c07 100644 --- a/homeassistant/components/locative/strings.json +++ b/homeassistant/components/locative/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to webhooks in the Locative app and update webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n\nSee [the documentation]({docs_url}) for further details.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/london_underground/strings.json b/homeassistant/components/london_underground/strings.json index 27f5213fab02..593f02dad0b0 100644 --- a/homeassistant/components/london_underground/strings.json +++ b/homeassistant/components/london_underground/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "timeout_connect": "[%key:common::config_flow::error::timeout_connect%]", diff --git a/homeassistant/components/mailgun/strings.json b/homeassistant/components/mailgun/strings.json index d2763f78f68b..eabde9948a3a 100644 --- a/homeassistant/components/mailgun/strings.json +++ b/homeassistant/components/mailgun/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to [webhooks in Mailgun]({mailgun_url}) and update the webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/miele/strings.json b/homeassistant/components/miele/strings.json index f5693e4e66c8..5070eb3c4653 100644 --- a/homeassistant/components/miele/strings.json +++ b/homeassistant/components/miele/strings.json @@ -9,8 +9,7 @@ "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index fa64f81a0936..214054e8f0dd 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -7,8 +7,7 @@ "addon_start_failed": "Failed to start the {addon} app.", "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" }, "error": { "bad_birth": "Invalid birth topic", diff --git a/homeassistant/components/netatmo/strings.json b/homeassistant/components/netatmo/strings.json index 2cf34d7e1ee0..94d64f46caa4 100644 --- a/homeassistant/components/netatmo/strings.json +++ b/homeassistant/components/netatmo/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/omie/strings.json b/homeassistant/components/omie/strings.json index 1646d7a856b8..10cef445348f 100644 --- a/homeassistant/components/omie/strings.json +++ b/homeassistant/components/omie/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" }, diff --git a/homeassistant/components/otbr/strings.json b/homeassistant/components/otbr/strings.json index 60ce2e6ec912..c03d42a6c334 100644 --- a/homeassistant/components/otbr/strings.json +++ b/homeassistant/components/otbr/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "The Thread border router is already configured", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/pglab/strings.json b/homeassistant/components/pglab/strings.json index 0ff5c7633e15..63c63d76304d 100644 --- a/homeassistant/components/pglab/strings.json +++ b/homeassistant/components/pglab/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "mqtt_not_configured": "Home Assistant MQTT integration not configured.", - "mqtt_not_connected": "Home Assistant MQTT integration not connected to MQTT broker.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "mqtt_not_connected": "Home Assistant MQTT integration not connected to MQTT broker." }, "step": { "confirm_from_mqtt": { diff --git a/homeassistant/components/plaato/strings.json b/homeassistant/components/plaato/strings.json index 7a696286c5bb..e3167d888041 100644 --- a/homeassistant/components/plaato/strings.json +++ b/homeassistant/components/plaato/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/refoss/strings.json b/homeassistant/components/refoss/strings.json index 3eaf68565423..e7e08f713524 100644 --- a/homeassistant/components/refoss/strings.json +++ b/homeassistant/components/refoss/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/sentry/config_flow.py b/homeassistant/components/sentry/config_flow.py index b131edd2e5e3..e284866c066a 100644 --- a/homeassistant/components/sentry/config_flow.py +++ b/homeassistant/components/sentry/config_flow.py @@ -12,7 +12,7 @@ from homeassistant.config_entries import ( ConfigFlowResult, OptionsFlow, ) -from homeassistant.core import callback +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, callback from .const import ( CONF_DSN, @@ -56,7 +56,10 @@ class SentryConfigFlow(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle a user config flow.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) errors = {} if user_input is not None: diff --git a/homeassistant/components/sentry/strings.json b/homeassistant/components/sentry/strings.json index d15d053524d7..006fef82dfdd 100644 --- a/homeassistant/components/sentry/strings.json +++ b/homeassistant/components/sentry/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "bad_dsn": "Invalid DSN", "unknown": "[%key:common::config_flow::error::unknown%]" diff --git a/homeassistant/components/slimproto/config_flow.py b/homeassistant/components/slimproto/config_flow.py index 99291b8a5c73..f1710cb05096 100644 --- a/homeassistant/components/slimproto/config_flow.py +++ b/homeassistant/components/slimproto/config_flow.py @@ -3,6 +3,7 @@ from typing import Any, override from homeassistant.config_entries import ConfigFlow, ConfigFlowResult +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN from .const import DEFAULT_NAME, DOMAIN @@ -18,7 +19,10 @@ class SlimProtoConfigFlow(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle the initial step.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) # we have nothing to configure so simply create the entry return self.async_create_entry(title=DEFAULT_NAME, data={}) diff --git a/homeassistant/components/slimproto/strings.json b/homeassistant/components/slimproto/strings.json index 151035f1efe4..2e07d4bc64e9 100644 --- a/homeassistant/components/slimproto/strings.json +++ b/homeassistant/components/slimproto/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "user": {} } diff --git a/homeassistant/components/sonos/strings.json b/homeassistant/components/sonos/strings.json index b17818ddc3cb..b9270998ae8f 100644 --- a/homeassistant/components/sonos/strings.json +++ b/homeassistant/components/sonos/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "not_ipv4_address": "No IPv4 address in SSDP discovery information", - "not_sonos_device": "Discovered device is not a Sonos device", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "not_sonos_device": "Discovered device is not a Sonos device" }, "step": { "confirm": { diff --git a/homeassistant/components/speedtestdotnet/config_flow.py b/homeassistant/components/speedtestdotnet/config_flow.py index 220642bd50a4..0b32db20828a 100644 --- a/homeassistant/components/speedtestdotnet/config_flow.py +++ b/homeassistant/components/speedtestdotnet/config_flow.py @@ -9,7 +9,7 @@ from homeassistant.config_entries import ( ConfigFlowResult, OptionsFlowWithReload, ) -from homeassistant.core import callback +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, callback from .const import ( CONF_SERVER_ID, @@ -41,7 +41,10 @@ class SpeedTestFlowHandler(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) if user_input is None: return self.async_show_form(step_id="user") diff --git a/homeassistant/components/speedtestdotnet/strings.json b/homeassistant/components/speedtestdotnet/strings.json index 244549ad1796..f288dd3d6c73 100644 --- a/homeassistant/components/speedtestdotnet/strings.json +++ b/homeassistant/components/speedtestdotnet/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "user": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/splunk/strings.json b/homeassistant/components/splunk/strings.json index cd5068317f44..b4e82c9ab018 100644 --- a/homeassistant/components/splunk/strings.json +++ b/homeassistant/components/splunk/strings.json @@ -7,7 +7,6 @@ "invalid_config": "The YAML configuration is invalid and cannot be imported. Please check your configuration.yaml file.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/switcher_kis/strings.json b/homeassistant/components/switcher_kis/strings.json index 32a00fc442a2..d632db07e8e1 100644 --- a/homeassistant/components/switcher_kis/strings.json +++ b/homeassistant/components/switcher_kis/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/systemmonitor/strings.json b/homeassistant/components/systemmonitor/strings.json index 97f8f16af84a..bcca38d7a4f9 100644 --- a/homeassistant/components/systemmonitor/strings.json +++ b/homeassistant/components/systemmonitor/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::already_configured_service%]" - }, "step": { "user": { "description": "Select **Submit** for initial setup. On the created config entry, select configure to add sensors for selected processes" diff --git a/homeassistant/components/tasmota/config_flow.py b/homeassistant/components/tasmota/config_flow.py index 7ccf7d88c1d2..68f2d6570ba3 100644 --- a/homeassistant/components/tasmota/config_flow.py +++ b/homeassistant/components/tasmota/config_flow.py @@ -6,6 +6,7 @@ import voluptuous as vol from homeassistant.components.mqtt import valid_subscribe_topic from homeassistant.config_entries import ConfigFlow, ConfigFlowResult +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN from homeassistant.helpers.service_info.mqtt import MqttServiceInfo from .const import CONF_DISCOVERY_PREFIX, DEFAULT_PREFIX, DOMAIN @@ -26,7 +27,10 @@ class FlowHandler(ConfigFlow, domain=DOMAIN): ) -> 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") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(DOMAIN) @@ -50,7 +54,10 @@ class FlowHandler(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) return await self.async_step_config() diff --git a/homeassistant/components/tasmota/strings.json b/homeassistant/components/tasmota/strings.json index 033a161a1b57..b96b1bddffeb 100644 --- a/homeassistant/components/tasmota/strings.json +++ b/homeassistant/components/tasmota/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "invalid_discovery_topic": "Invalid discovery topic prefix." }, diff --git a/homeassistant/components/todoist/config_flow.py b/homeassistant/components/todoist/config_flow.py index cb0150c24c2d..c8432a64d37d 100644 --- a/homeassistant/components/todoist/config_flow.py +++ b/homeassistant/components/todoist/config_flow.py @@ -10,6 +10,7 @@ import voluptuous as vol from homeassistant.config_entries import ConfigFlow, ConfigFlowResult from homeassistant.const import CONF_TOKEN +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN from .const import DOMAIN @@ -35,7 +36,10 @@ class TodoistConfigFlow(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle the initial step.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) errors: dict[str, str] = {} if user_input is not None: diff --git a/homeassistant/components/todoist/strings.json b/homeassistant/components/todoist/strings.json index fb46f24efe7a..52dc1413041d 100644 --- a/homeassistant/components/todoist/strings.json +++ b/homeassistant/components/todoist/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" }, diff --git a/homeassistant/components/traccar/strings.json b/homeassistant/components/traccar/strings.json index fcf1e729aa8d..b15361ae396e 100644 --- a/homeassistant/components/traccar/strings.json +++ b/homeassistant/components/traccar/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to webhooks in the Traccar Client and update the webhook with the following URL: `{webhook_url}`\n\nSee [the documentation]({docs_url}) for further details.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/twilio/strings.json b/homeassistant/components/twilio/strings.json index bb3a726fb5e6..7986b4d7a9e0 100644 --- a/homeassistant/components/twilio/strings.json +++ b/homeassistant/components/twilio/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "reconfigure_successful": "**Reconfiguration was successful**\n\nGo to [webhooks in Twilio]({twilio_url}) and update the webhook with the following settings:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\nSee [the documentation]({docs_url}) on how to configure automations to handle incoming data.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "webhook_not_internet_accessible": "[%key:common::config_flow::abort::webhook_not_internet_accessible%]" }, "create_entry": { diff --git a/homeassistant/components/vicare/config_flow.py b/homeassistant/components/vicare/config_flow.py index 5203c2e82c3e..b4868b3c1615 100644 --- a/homeassistant/components/vicare/config_flow.py +++ b/homeassistant/components/vicare/config_flow.py @@ -5,6 +5,7 @@ import logging from typing import Any, override from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlowResult +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN from homeassistant.helpers import config_entry_oauth2_flow from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.service_info.dhcp import DhcpServiceInfo @@ -35,7 +36,10 @@ class ViCareFlowHandler( ) -> ConfigFlowResult: """Handle a flow initiated by the user.""" if self.source != SOURCE_REAUTH and self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) return await super().async_step_user(user_input) @@ -81,6 +85,9 @@ class ViCareFlowHandler( self._abort_if_unique_id_configured() if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) return await self.async_step_user() diff --git a/homeassistant/components/vicare/strings.json b/homeassistant/components/vicare/strings.json index a528e2ca33b6..ad723aed14f2 100644 --- a/homeassistant/components/vicare/strings.json +++ b/homeassistant/components/vicare/strings.json @@ -7,7 +7,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "create_entry": { diff --git a/homeassistant/components/voip/config_flow.py b/homeassistant/components/voip/config_flow.py index daa916d3d4c1..915fe26147b7 100644 --- a/homeassistant/components/voip/config_flow.py +++ b/homeassistant/components/voip/config_flow.py @@ -11,7 +11,7 @@ from homeassistant.config_entries import ( ConfigFlowResult, OptionsFlow, ) -from homeassistant.core import callback +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, callback from homeassistant.helpers import config_validation as cv from .const import CONF_SIP_PORT, CONF_SIP_USER, DOMAIN @@ -28,7 +28,10 @@ class VoIPConfigFlow(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle the initial step.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) if user_input is None: return self.async_show_form( diff --git a/homeassistant/components/voip/strings.json b/homeassistant/components/voip/strings.json index d0502190b4be..9f5f15d78137 100644 --- a/homeassistant/components/voip/strings.json +++ b/homeassistant/components/voip/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "user": { "description": "Receive Voice over IP calls to interact with Assist." diff --git a/homeassistant/components/weatherflow/config_flow.py b/homeassistant/components/weatherflow/config_flow.py index 1c11ae4b933d..e7c878fc397e 100644 --- a/homeassistant/components/weatherflow/config_flow.py +++ b/homeassistant/components/weatherflow/config_flow.py @@ -9,7 +9,7 @@ from pyweatherflowudp.client import EVENT_DEVICE_DISCOVERED, WeatherFlowListener from pyweatherflowudp.errors import AddressInUseError, EndpointError, ListenerError from homeassistant.config_entries import ConfigFlow, ConfigFlowResult -from homeassistant.core import callback +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, callback from .const import ( DOMAIN, @@ -55,7 +55,10 @@ class WeatherFlowConfigFlow(ConfigFlow, domain=DOMAIN): # will pick up all devices on the network and we don't want to # create multiple entries. if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) found = False errors = {} try: diff --git a/homeassistant/components/weatherflow/strings.json b/homeassistant/components/weatherflow/strings.json index eb5621317094..2f0f18eca3b0 100644 --- a/homeassistant/components/weatherflow/strings.json +++ b/homeassistant/components/weatherflow/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "error": { "address_in_use": "Unable to open local UDP port 50222.", "cannot_connect": "UDP discovery error.", diff --git a/homeassistant/components/wemo/strings.json b/homeassistant/components/wemo/strings.json index 874f4633c214..eaefaa709a32 100644 --- a/homeassistant/components/wemo/strings.json +++ b/homeassistant/components/wemo/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "Do you want to set up Wemo?" diff --git a/homeassistant/components/zerproc/strings.json b/homeassistant/components/zerproc/strings.json index 7b2ae512458d..0a9cf0004bc9 100644 --- a/homeassistant/components/zerproc/strings.json +++ b/homeassistant/components/zerproc/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "confirm": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/components/zha/config_flow.py b/homeassistant/components/zha/config_flow.py index ec7e147bf51f..a434c502a3cc 100644 --- a/homeassistant/components/zha/config_flow.py +++ b/homeassistant/components/zha/config_flow.py @@ -31,7 +31,7 @@ from homeassistant.config_entries import ( OptionsFlow, ) from homeassistant.const import CONF_NAME -from homeassistant.core import HomeAssistant, callback +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant, callback from homeassistant.data_entry_flow import AbortFlow from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.selector import ( @@ -828,7 +828,10 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN): # Abort discovery if the device path is already configured if path is not None and path in current_device_paths: - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) # Without confirmation, discovery can automatically progress into parts of the # config flow logic that interacts with hardware. @@ -1032,7 +1035,10 @@ class ZhaConfigFlowHandler(BaseZhaFlow, ConfigFlow, domain=DOMAIN): return self.async_create_entry(title="", data=data) # This should never be reached - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) class ZhaOptionsFlowHandler(BaseZhaFlow, OptionsFlow): diff --git a/homeassistant/components/zha/strings.json b/homeassistant/components/zha/strings.json index 50b5cc71802f..175e8a2b9cf9 100644 --- a/homeassistant/components/zha/strings.json +++ b/homeassistant/components/zha/strings.json @@ -8,7 +8,6 @@ "invalid_zeroconf_data": "The coordinator has invalid Zeroconf service info and cannot be identified by ZHA", "not_zha_device": "This device is not a ZHA device", "reconfigure_successful": "ZHA has successfully migrated from your old adapter to the new one. Give your Zigbee network a few minutes to stabilize.\n\nIf you no longer need the old adapter, you can now unplug it.", - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "usb_probe_failed": "Failed to probe the USB device", "wrong_firmware_installed": "Your device is running the wrong firmware and cannot be used with ZHA until the correct firmware is installed. [A repair has been created]({repair_url}) with more information and instructions for how to fix this." }, diff --git a/homeassistant/components/zodiac/config_flow.py b/homeassistant/components/zodiac/config_flow.py index b226b9d29664..81e839eeb403 100644 --- a/homeassistant/components/zodiac/config_flow.py +++ b/homeassistant/components/zodiac/config_flow.py @@ -3,6 +3,7 @@ from typing import Any, override from homeassistant.config_entries import ConfigFlow, ConfigFlowResult +from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN from .const import DEFAULT_NAME, DOMAIN @@ -18,7 +19,10 @@ class ZodiacConfigFlow(ConfigFlow, domain=DOMAIN): ) -> ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) if user_input is not None: return self.async_create_entry(title=DEFAULT_NAME, data={}) diff --git a/homeassistant/components/zodiac/strings.json b/homeassistant/components/zodiac/strings.json index 2c534cef9890..af971f3fe8b2 100644 --- a/homeassistant/components/zodiac/strings.json +++ b/homeassistant/components/zodiac/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" - }, "step": { "user": { "description": "[%key:common::config_flow::description::confirm_setup%]" diff --git a/homeassistant/helpers/config_entry_flow.py b/homeassistant/helpers/config_entry_flow.py index c46188a32950..e6d195f68d40 100644 --- a/homeassistant/helpers/config_entry_flow.py +++ b/homeassistant/helpers/config_entry_flow.py @@ -47,7 +47,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by the user.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain, raise_on_progress=False) @@ -83,7 +86,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow self.hass.config_entries.flow.async_abort(flow["flow_id"]) if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) return self.async_create_entry(title=self._title, data={}) @@ -93,7 +99,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -105,7 +114,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by bluetooth discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -117,7 +129,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by dhcp discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -129,7 +144,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by Homekit discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -141,7 +159,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.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") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -153,7 +174,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by Zeroconf discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -165,7 +189,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by Ssdp discovery.""" if self._async_in_progress() or self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) await self.async_set_unique_id(self._domain) @@ -176,7 +203,10 @@ class DiscoveryFlowHandler[_R: Awaitable[bool] | bool](config_entries.ConfigFlow ) -> config_entries.ConfigFlowResult: """Handle a flow initialized by import.""" if self._async_current_entries(): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) # Cancel other flows. in_progress = self._async_in_progress() @@ -230,7 +260,10 @@ class WebhookFlowHandler(config_entries.ConfigFlow): and self._async_current_entries() and self.source != config_entries.SOURCE_RECONFIGURE ): - return self.async_abort(reason="single_instance_allowed") + return self.async_abort( + reason="single_instance_allowed", + translation_domain=HOMEASSISTANT_DOMAIN, + ) if user_input is None: return self.async_show_form( diff --git a/tests/helpers/test_config_entry_flow.py b/tests/helpers/test_config_entry_flow.py index b03dcc0a487c..85c48b1d9cb5 100644 --- a/tests/helpers/test_config_entry_flow.py +++ b/tests/helpers/test_config_entry_flow.py @@ -77,6 +77,7 @@ async def test_single_entry_allowed( assert result["type"] is data_entry_flow.FlowResultType.ABORT assert result["reason"] == "single_instance_allowed" + assert result["translation_domain"] == HOMEASSISTANT_DOMAIN async def test_user_no_devices_found( @@ -152,6 +153,7 @@ async def test_user_has_confirmation_async_discovery_flow( [ config_entries.SOURCE_BLUETOOTH, config_entries.SOURCE_DISCOVERY, + config_entries.SOURCE_HOMEKIT, config_entries.SOURCE_MQTT, config_entries.SOURCE_SSDP, config_entries.SOURCE_ZEROCONF, @@ -171,6 +173,23 @@ async def test_discovery_single_instance( assert result["type"] == data_entry_flow.FlowResultType.ABORT assert result["reason"] == "single_instance_allowed" + assert result["translation_domain"] == HOMEASSISTANT_DOMAIN + + +async def test_discovery_confirm_single_instance( + hass: HomeAssistant, discovery_flow_conf: dict[str, bool] +) -> None: + """Test confirming a discovery aborts once an entry exists.""" + flow = config_entries.HANDLERS["test"]() + flow.hass = hass + flow.context = {"source": config_entries.SOURCE_DISCOVERY} + + MockConfigEntry(domain="test").add_to_hass(hass) + result = await flow.async_step_confirm({}) + + assert result["type"] is data_entry_flow.FlowResultType.ABORT + assert result["reason"] == "single_instance_allowed" + assert result["translation_domain"] == HOMEASSISTANT_DOMAIN @pytest.mark.parametrize( @@ -322,6 +341,8 @@ async def test_import_single_instance( result = await flow.async_step_import(None) assert result["type"] == data_entry_flow.FlowResultType.ABORT + assert result["reason"] == "single_instance_allowed" + assert result["translation_domain"] == HOMEASSISTANT_DOMAIN async def test_ignored_discoveries( @@ -370,6 +391,7 @@ async def test_webhook_single_entry_allowed( assert result["type"] is data_entry_flow.FlowResultType.ABORT assert result["reason"] == "single_instance_allowed" + assert result["translation_domain"] == HOMEASSISTANT_DOMAIN async def test_webhook_multiple_entries_allowed(