From f6e5e1b167de379af31f439517117a9260ebac67 Mon Sep 17 00:00:00 2001 From: ollo69 <60491700+ollo69@users.noreply.github.com> Date: Thu, 21 Apr 2022 17:23:40 +0200 Subject: [PATCH] Simplify AsusWRT config flow (#69800) --- .../components/asuswrt/config_flow.py | 39 ++++++++++--------- homeassistant/components/asuswrt/const.py | 1 - homeassistant/components/asuswrt/router.py | 2 +- homeassistant/components/asuswrt/strings.json | 2 +- .../components/asuswrt/translations/en.json | 2 +- tests/components/asuswrt/test_config_flow.py | 22 +++++------ 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/homeassistant/components/asuswrt/config_flow.py b/homeassistant/components/asuswrt/config_flow.py index a06071a33d1..578ee3f968b 100644 --- a/homeassistant/components/asuswrt/config_flow.py +++ b/homeassistant/components/asuswrt/config_flow.py @@ -29,7 +29,6 @@ from .const import ( CONF_TRACK_UNKNOWN, DEFAULT_DNSMASQ, DEFAULT_INTERFACE, - DEFAULT_SSH_PORT, DEFAULT_TRACK_UNKNOWN, DOMAIN, MODE_AP, @@ -76,25 +75,28 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): if user_input is None: user_input = {} + schema = { + vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str, + vol.Required(CONF_USERNAME, default=user_input.get(CONF_USERNAME, "")): str, + vol.Optional(CONF_PASSWORD) + if self.show_advanced_options + else vol.Required(CONF_PASSWORD): str, + vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In( + {PROTOCOL_SSH: "SSH", PROTOCOL_TELNET: "Telnet"} + ), + } + + if self.show_advanced_options: + schema[vol.Optional(CONF_PORT)] = cv.port + schema[vol.Optional(CONF_SSH_KEY)] = str + + schema[vol.Required(CONF_MODE, default=MODE_ROUTER)] = vol.In( + {MODE_ROUTER: "Router", MODE_AP: "Access Point"} + ) + return self.async_show_form( step_id="user", - data_schema=vol.Schema( - { - vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str, - vol.Required( - CONF_USERNAME, default=user_input.get(CONF_USERNAME, "") - ): str, - vol.Optional(CONF_PASSWORD): str, - vol.Optional(CONF_SSH_KEY): str, - vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In( - {PROTOCOL_SSH: "SSH", PROTOCOL_TELNET: "Telnet"} - ), - vol.Required(CONF_PORT, default=DEFAULT_SSH_PORT): cv.port, - vol.Required(CONF_MODE, default=MODE_ROUTER): vol.In( - {MODE_ROUTER: "Router", MODE_AP: "Access Point"} - ), - } - ), + data_schema=vol.Schema(schema), errors=errors or {}, ) @@ -134,6 +136,7 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors = {} self._host = user_input[CONF_HOST] + pwd = user_input.get(CONF_PASSWORD) ssh = user_input.get(CONF_SSH_KEY) diff --git a/homeassistant/components/asuswrt/const.py b/homeassistant/components/asuswrt/const.py index 95e93e0ff25..f80643f078d 100644 --- a/homeassistant/components/asuswrt/const.py +++ b/homeassistant/components/asuswrt/const.py @@ -11,7 +11,6 @@ DATA_ASUSWRT = DOMAIN DEFAULT_DNSMASQ = "/var/lib/misc" DEFAULT_INTERFACE = "eth0" -DEFAULT_SSH_PORT = 22 DEFAULT_TRACK_UNKNOWN = False MODE_AP = "ap" diff --git a/homeassistant/components/asuswrt/router.py b/homeassistant/components/asuswrt/router.py index c167fb30f36..70addb926ec 100644 --- a/homeassistant/components/asuswrt/router.py +++ b/homeassistant/components/asuswrt/router.py @@ -492,7 +492,7 @@ def get_api(conf: dict[str, Any], options: dict[str, Any] | None = None) -> Asus return AsusWrt( conf[CONF_HOST], - conf[CONF_PORT], + conf.get(CONF_PORT), conf[CONF_PROTOCOL] == PROTOCOL_TELNET, conf[CONF_USERNAME], conf.get(CONF_PASSWORD, ""), diff --git a/homeassistant/components/asuswrt/strings.json b/homeassistant/components/asuswrt/strings.json index ae94870eed3..56f3c659c0b 100644 --- a/homeassistant/components/asuswrt/strings.json +++ b/homeassistant/components/asuswrt/strings.json @@ -11,7 +11,7 @@ "password": "[%key:common::config_flow::data::password%]", "ssh_key": "Path to your SSH key file (instead of password)", "protocol": "Communication protocol to use", - "port": "[%key:common::config_flow::data::port%]", + "port": "[%key:common::config_flow::data::port%] (leave empty for protocol default)", "mode": "[%key:common::config_flow::data::mode%]" } } diff --git a/homeassistant/components/asuswrt/translations/en.json b/homeassistant/components/asuswrt/translations/en.json index e835bf97538..4bef898ff35 100644 --- a/homeassistant/components/asuswrt/translations/en.json +++ b/homeassistant/components/asuswrt/translations/en.json @@ -18,7 +18,7 @@ "mode": "Mode", "name": "Name", "password": "Password", - "port": "Port", + "port": "Port (leave empty for protocol default)", "protocol": "Communication protocol to use", "ssh_key": "Path to your SSH key file (instead of password)", "username": "Username" diff --git a/tests/components/asuswrt/test_config_flow.py b/tests/components/asuswrt/test_config_flow.py index 7fe2681bafd..a1a37d25460 100644 --- a/tests/components/asuswrt/test_config_flow.py +++ b/tests/components/asuswrt/test_config_flow.py @@ -52,11 +52,11 @@ def mock_controller_connect(): async def test_user(hass, connect): """Test user config.""" - result = await hass.config_entries.flow.async_init( - DOMAIN, context={"source": SOURCE_USER} + flow_result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_USER, "show_advanced_options": True} ) - assert result["type"] == data_entry_flow.RESULT_TYPE_FORM - assert result["step_id"] == "user" + assert flow_result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert flow_result["step_id"] == "user" # test with all provided with patch( @@ -66,10 +66,8 @@ async def test_user(hass, connect): "homeassistant.components.asuswrt.config_flow.socket.gethostbyname", return_value=IP_ADDRESS, ): - result = await hass.config_entries.flow.async_init( - DOMAIN, - context={"source": SOURCE_USER}, - data=CONFIG_DATA, + result = await hass.config_entries.flow.async_configure( + flow_result["flow_id"], user_input=CONFIG_DATA ) await hass.async_block_till_done() @@ -86,7 +84,7 @@ async def test_error_no_password_ssh(hass): config_data.pop(CONF_PASSWORD) result = await hass.config_entries.flow.async_init( DOMAIN, - context={"source": SOURCE_USER}, + context={"source": SOURCE_USER, "show_advanced_options": True}, data=config_data, ) @@ -100,7 +98,7 @@ async def test_error_both_password_ssh(hass): config_data[CONF_SSH_KEY] = SSH_KEY result = await hass.config_entries.flow.async_init( DOMAIN, - context={"source": SOURCE_USER}, + context={"source": SOURCE_USER, "show_advanced_options": True}, data=config_data, ) @@ -115,7 +113,7 @@ async def test_error_invalid_ssh(hass): config_data[CONF_SSH_KEY] = SSH_KEY result = await hass.config_entries.flow.async_init( DOMAIN, - context={"source": SOURCE_USER}, + context={"source": SOURCE_USER, "show_advanced_options": True}, data=config_data, ) @@ -164,7 +162,7 @@ async def test_on_connect_failed(hass): """Test when we have errors connecting the router.""" flow_result = await hass.config_entries.flow.async_init( DOMAIN, - context={"source": SOURCE_USER}, + context={"source": SOURCE_USER, "show_advanced_options": True}, ) with patch("homeassistant.components.asuswrt.router.AsusWrt") as asus_wrt: