Simplify AsusWRT config flow (#69800)

This commit is contained in:
ollo69 2022-04-21 17:23:40 +02:00 committed by GitHub
parent a2c74b9786
commit f6e5e1b167
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 34 deletions

View File

@ -29,7 +29,6 @@ from .const import (
CONF_TRACK_UNKNOWN, CONF_TRACK_UNKNOWN,
DEFAULT_DNSMASQ, DEFAULT_DNSMASQ,
DEFAULT_INTERFACE, DEFAULT_INTERFACE,
DEFAULT_SSH_PORT,
DEFAULT_TRACK_UNKNOWN, DEFAULT_TRACK_UNKNOWN,
DOMAIN, DOMAIN,
MODE_AP, MODE_AP,
@ -76,25 +75,28 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
if user_input is None: if user_input is None:
user_input = {} user_input = {}
return self.async_show_form( schema = {
step_id="user",
data_schema=vol.Schema(
{
vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str, vol.Required(CONF_HOST, default=user_input.get(CONF_HOST, "")): str,
vol.Required( vol.Required(CONF_USERNAME, default=user_input.get(CONF_USERNAME, "")): str,
CONF_USERNAME, default=user_input.get(CONF_USERNAME, "") vol.Optional(CONF_PASSWORD)
): str, if self.show_advanced_options
vol.Optional(CONF_PASSWORD): str, else vol.Required(CONF_PASSWORD): str,
vol.Optional(CONF_SSH_KEY): str,
vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In( vol.Required(CONF_PROTOCOL, default=PROTOCOL_SSH): vol.In(
{PROTOCOL_SSH: "SSH", PROTOCOL_TELNET: "Telnet"} {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"}
),
} }
),
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(schema),
errors=errors or {}, errors=errors or {},
) )
@ -134,6 +136,7 @@ class AsusWrtFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
errors = {} errors = {}
self._host = user_input[CONF_HOST] self._host = user_input[CONF_HOST]
pwd = user_input.get(CONF_PASSWORD) pwd = user_input.get(CONF_PASSWORD)
ssh = user_input.get(CONF_SSH_KEY) ssh = user_input.get(CONF_SSH_KEY)

View File

@ -11,7 +11,6 @@ DATA_ASUSWRT = DOMAIN
DEFAULT_DNSMASQ = "/var/lib/misc" DEFAULT_DNSMASQ = "/var/lib/misc"
DEFAULT_INTERFACE = "eth0" DEFAULT_INTERFACE = "eth0"
DEFAULT_SSH_PORT = 22
DEFAULT_TRACK_UNKNOWN = False DEFAULT_TRACK_UNKNOWN = False
MODE_AP = "ap" MODE_AP = "ap"

View File

@ -492,7 +492,7 @@ def get_api(conf: dict[str, Any], options: dict[str, Any] | None = None) -> Asus
return AsusWrt( return AsusWrt(
conf[CONF_HOST], conf[CONF_HOST],
conf[CONF_PORT], conf.get(CONF_PORT),
conf[CONF_PROTOCOL] == PROTOCOL_TELNET, conf[CONF_PROTOCOL] == PROTOCOL_TELNET,
conf[CONF_USERNAME], conf[CONF_USERNAME],
conf.get(CONF_PASSWORD, ""), conf.get(CONF_PASSWORD, ""),

View File

@ -11,7 +11,7 @@
"password": "[%key:common::config_flow::data::password%]", "password": "[%key:common::config_flow::data::password%]",
"ssh_key": "Path to your SSH key file (instead of password)", "ssh_key": "Path to your SSH key file (instead of password)",
"protocol": "Communication protocol to use", "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%]" "mode": "[%key:common::config_flow::data::mode%]"
} }
} }

View File

@ -18,7 +18,7 @@
"mode": "Mode", "mode": "Mode",
"name": "Name", "name": "Name",
"password": "Password", "password": "Password",
"port": "Port", "port": "Port (leave empty for protocol default)",
"protocol": "Communication protocol to use", "protocol": "Communication protocol to use",
"ssh_key": "Path to your SSH key file (instead of password)", "ssh_key": "Path to your SSH key file (instead of password)",
"username": "Username" "username": "Username"

View File

@ -52,11 +52,11 @@ def mock_controller_connect():
async def test_user(hass, connect): async def test_user(hass, connect):
"""Test user config.""" """Test user config."""
result = await hass.config_entries.flow.async_init( flow_result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": SOURCE_USER} DOMAIN, context={"source": SOURCE_USER, "show_advanced_options": True}
) )
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert flow_result["type"] == data_entry_flow.RESULT_TYPE_FORM
assert result["step_id"] == "user" assert flow_result["step_id"] == "user"
# test with all provided # test with all provided
with patch( with patch(
@ -66,10 +66,8 @@ async def test_user(hass, connect):
"homeassistant.components.asuswrt.config_flow.socket.gethostbyname", "homeassistant.components.asuswrt.config_flow.socket.gethostbyname",
return_value=IP_ADDRESS, return_value=IP_ADDRESS,
): ):
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_configure(
DOMAIN, flow_result["flow_id"], user_input=CONFIG_DATA
context={"source": SOURCE_USER},
data=CONFIG_DATA,
) )
await hass.async_block_till_done() await hass.async_block_till_done()
@ -86,7 +84,7 @@ async def test_error_no_password_ssh(hass):
config_data.pop(CONF_PASSWORD) config_data.pop(CONF_PASSWORD)
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": SOURCE_USER}, context={"source": SOURCE_USER, "show_advanced_options": True},
data=config_data, data=config_data,
) )
@ -100,7 +98,7 @@ async def test_error_both_password_ssh(hass):
config_data[CONF_SSH_KEY] = SSH_KEY config_data[CONF_SSH_KEY] = SSH_KEY
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": SOURCE_USER}, context={"source": SOURCE_USER, "show_advanced_options": True},
data=config_data, data=config_data,
) )
@ -115,7 +113,7 @@ async def test_error_invalid_ssh(hass):
config_data[CONF_SSH_KEY] = SSH_KEY config_data[CONF_SSH_KEY] = SSH_KEY
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": SOURCE_USER}, context={"source": SOURCE_USER, "show_advanced_options": True},
data=config_data, data=config_data,
) )
@ -164,7 +162,7 @@ async def test_on_connect_failed(hass):
"""Test when we have errors connecting the router.""" """Test when we have errors connecting the router."""
flow_result = await hass.config_entries.flow.async_init( flow_result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": SOURCE_USER}, context={"source": SOURCE_USER, "show_advanced_options": True},
) )
with patch("homeassistant.components.asuswrt.router.AsusWrt") as asus_wrt: with patch("homeassistant.components.asuswrt.router.AsusWrt") as asus_wrt: