From 8e58c3aa7bc8d2c2b09b6bd329daa1c092d52d3c Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Tue, 9 Mar 2021 01:12:52 +0100 Subject: [PATCH] Add error message to options flow if connection fails for nut integration (#46972) --- homeassistant/components/nut/config_flow.py | 24 +++++++++++++++---- homeassistant/components/nut/strings.json | 4 ++++ .../components/nut/translations/en.json | 4 ++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/nut/config_flow.py b/homeassistant/components/nut/config_flow.py index 7407958cdc0..b6f56192d80 100644 --- a/homeassistant/components/nut/config_flow.py +++ b/homeassistant/components/nut/config_flow.py @@ -6,6 +6,7 @@ import voluptuous as vol from homeassistant import config_entries, core, exceptions from homeassistant.const import ( CONF_ALIAS, + CONF_BASE, CONF_HOST, CONF_PASSWORD, CONF_PORT, @@ -211,10 +212,10 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): try: info = await validate_input(self.hass, config) except CannotConnect: - errors["base"] = "cannot_connect" + errors[CONF_BASE] = "cannot_connect" except Exception: # pylint: disable=broad-except _LOGGER.exception("Unexpected exception") - errors["base"] = "unknown" + errors[CONF_BASE] = "unknown" return info, errors @staticmethod @@ -241,7 +242,17 @@ class OptionsFlowHandler(config_entries.OptionsFlow): CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL ) - info = await validate_input(self.hass, self.config_entry.data) + errors = {} + try: + info = await validate_input(self.hass, self.config_entry.data) + except CannotConnect: + errors[CONF_BASE] = "cannot_connect" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + errors[CONF_BASE] = "unknown" + + if errors: + return self.async_show_form(step_id="abort", errors=errors) base_schema = _resource_schema_base(info["available_resources"], resources) base_schema[ @@ -249,10 +260,13 @@ class OptionsFlowHandler(config_entries.OptionsFlow): ] = cv.positive_int return self.async_show_form( - step_id="init", - data_schema=vol.Schema(base_schema), + step_id="init", data_schema=vol.Schema(base_schema), errors=errors ) + async def async_step_abort(self, user_input=None): + """Abort options flow.""" + return self.async_create_entry(title="", data=self.config_entry.options) + class CannotConnect(exceptions.HomeAssistantError): """Error to indicate we cannot connect.""" diff --git a/homeassistant/components/nut/strings.json b/homeassistant/components/nut/strings.json index 1b71280b6a9..97e637fdcb3 100644 --- a/homeassistant/components/nut/strings.json +++ b/homeassistant/components/nut/strings.json @@ -41,6 +41,10 @@ "scan_interval": "Scan Interval (seconds)" } } + }, + "error": { + "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", + "unknown": "[%key:common::config_flow::error::unknown%]" } } } diff --git a/homeassistant/components/nut/translations/en.json b/homeassistant/components/nut/translations/en.json index 2e5db79d81c..3d57189f7a5 100644 --- a/homeassistant/components/nut/translations/en.json +++ b/homeassistant/components/nut/translations/en.json @@ -33,6 +33,10 @@ } }, "options": { + "error": { + "cannot_connect": "Failed to connect", + "unknown": "Unexpected error" + }, "step": { "init": { "data": {