mirror of
https://github.com/home-assistant/core.git
synced 2025-04-19 14:57:52 +00:00
Clean config flow for SQL (#92332)
This commit is contained in:
parent
f47f49c9a1
commit
2c5cad4ca0
@ -286,6 +286,7 @@ homeassistant.components.smhi.*
|
||||
homeassistant.components.snooz.*
|
||||
homeassistant.components.sonarr.*
|
||||
homeassistant.components.speedtestdotnet.*
|
||||
homeassistant.components.sql.*
|
||||
homeassistant.components.ssdp.*
|
||||
homeassistant.components.statistics.*
|
||||
homeassistant.components.steamist.*
|
||||
|
@ -114,9 +114,6 @@ class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
db_url = user_input.get(CONF_DB_URL)
|
||||
query = user_input[CONF_QUERY]
|
||||
column = user_input[CONF_COLUMN_NAME]
|
||||
uom = user_input.get(CONF_UNIT_OF_MEASUREMENT)
|
||||
value_template = user_input.get(CONF_VALUE_TEMPLATE)
|
||||
name = user_input[CONF_NAME]
|
||||
db_url_for_validation = None
|
||||
|
||||
try:
|
||||
@ -133,22 +130,23 @@ class SQLConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
except ValueError:
|
||||
errors["query"] = "query_invalid"
|
||||
|
||||
add_db_url = (
|
||||
{CONF_DB_URL: db_url} if db_url == db_url_for_validation else {}
|
||||
)
|
||||
options = {
|
||||
CONF_QUERY: query,
|
||||
CONF_COLUMN_NAME: column,
|
||||
CONF_NAME: user_input[CONF_NAME],
|
||||
}
|
||||
if uom := user_input.get(CONF_UNIT_OF_MEASUREMENT):
|
||||
options[CONF_UNIT_OF_MEASUREMENT] = uom
|
||||
if value_template := user_input.get(CONF_VALUE_TEMPLATE):
|
||||
options[CONF_VALUE_TEMPLATE] = value_template
|
||||
if db_url_for_validation != get_instance(self.hass).db_url:
|
||||
options[CONF_DB_URL] = db_url_for_validation
|
||||
|
||||
if not errors:
|
||||
return self.async_create_entry(
|
||||
title=name,
|
||||
title=user_input[CONF_NAME],
|
||||
data={},
|
||||
options={
|
||||
**add_db_url,
|
||||
CONF_QUERY: query,
|
||||
CONF_COLUMN_NAME: column,
|
||||
CONF_UNIT_OF_MEASUREMENT: uom,
|
||||
CONF_VALUE_TEMPLATE: value_template,
|
||||
CONF_NAME: name,
|
||||
},
|
||||
options=options,
|
||||
)
|
||||
|
||||
return self.async_show_form(
|
||||
@ -196,13 +194,21 @@ class SQLOptionsFlowHandler(config_entries.OptionsFlowWithConfigEntry):
|
||||
db_url_for_validation,
|
||||
recorder_db,
|
||||
)
|
||||
if db_url and db_url_for_validation == recorder_db:
|
||||
user_input.pop(CONF_DB_URL)
|
||||
|
||||
options = {
|
||||
CONF_QUERY: query,
|
||||
CONF_COLUMN_NAME: column,
|
||||
CONF_NAME: name,
|
||||
}
|
||||
if uom := user_input.get(CONF_UNIT_OF_MEASUREMENT):
|
||||
options[CONF_UNIT_OF_MEASUREMENT] = uom
|
||||
if value_template := user_input.get(CONF_VALUE_TEMPLATE):
|
||||
options[CONF_VALUE_TEMPLATE] = value_template
|
||||
if db_url_for_validation != get_instance(self.hass).db_url:
|
||||
options[CONF_DB_URL] = db_url_for_validation
|
||||
|
||||
return self.async_create_entry(
|
||||
data={
|
||||
CONF_NAME: name,
|
||||
**user_input,
|
||||
},
|
||||
data=options,
|
||||
)
|
||||
|
||||
return self.async_show_form(
|
||||
|
10
mypy.ini
10
mypy.ini
@ -2622,6 +2622,16 @@ disallow_untyped_defs = true
|
||||
warn_return_any = true
|
||||
warn_unreachable = true
|
||||
|
||||
[mypy-homeassistant.components.sql.*]
|
||||
check_untyped_defs = true
|
||||
disallow_incomplete_defs = true
|
||||
disallow_subclassing_any = true
|
||||
disallow_untyped_calls = true
|
||||
disallow_untyped_decorators = true
|
||||
disallow_untyped_defs = true
|
||||
warn_return_any = true
|
||||
warn_unreachable = true
|
||||
|
||||
[mypy-homeassistant.components.ssdp.*]
|
||||
check_untyped_defs = true
|
||||
disallow_incomplete_defs = true
|
||||
|
@ -29,6 +29,14 @@ ENTRY_CONFIG = {
|
||||
CONF_UNIT_OF_MEASUREMENT: "MiB",
|
||||
}
|
||||
|
||||
ENTRY_CONFIG_WITH_VALUE_TEMPLATE = {
|
||||
CONF_NAME: "Get Value",
|
||||
CONF_QUERY: "SELECT 5 as value",
|
||||
CONF_COLUMN_NAME: "value",
|
||||
CONF_UNIT_OF_MEASUREMENT: "MiB",
|
||||
CONF_VALUE_TEMPLATE: "{{ value }}",
|
||||
}
|
||||
|
||||
ENTRY_CONFIG_INVALID_QUERY = {
|
||||
CONF_NAME: "Get Value",
|
||||
CONF_QUERY: "UPDATE 5 as value",
|
||||
|
@ -18,6 +18,7 @@ from . import (
|
||||
ENTRY_CONFIG_INVALID_QUERY,
|
||||
ENTRY_CONFIG_INVALID_QUERY_OPT,
|
||||
ENTRY_CONFIG_NO_RESULTS,
|
||||
ENTRY_CONFIG_WITH_VALUE_TEMPLATE,
|
||||
)
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
@ -49,7 +50,39 @@ async def test_form(recorder_mock: Recorder, hass: HomeAssistant) -> None:
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
}
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_form_with_value_template(
|
||||
recorder_mock: Recorder, hass: HomeAssistant
|
||||
) -> None:
|
||||
"""Test for with value template."""
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||
)
|
||||
assert result["type"] == FlowResultType.FORM
|
||||
assert result["errors"] == {}
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.sql.async_setup_entry",
|
||||
return_value=True,
|
||||
) as mock_setup_entry:
|
||||
result2 = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
ENTRY_CONFIG_WITH_VALUE_TEMPLATE,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result2["type"] == FlowResultType.CREATE_ENTRY
|
||||
assert result2["title"] == "Get Value"
|
||||
assert result2["options"] == {
|
||||
"name": "Get Value",
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": "{{ value }}",
|
||||
}
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
@ -118,7 +151,6 @@ async def test_flow_fails_invalid_query(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
}
|
||||
|
||||
|
||||
@ -155,7 +187,6 @@ async def test_flow_fails_invalid_column_name(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
}
|
||||
|
||||
|
||||
@ -170,7 +201,6 @@ async def test_options_flow(recorder_mock: Recorder, hass: HomeAssistant) -> Non
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
@ -194,6 +224,7 @@ async def test_options_flow(recorder_mock: Recorder, hass: HomeAssistant) -> Non
|
||||
"query": "SELECT 5 as size",
|
||||
"column": "size",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": "{{ value }}",
|
||||
},
|
||||
)
|
||||
|
||||
@ -203,6 +234,7 @@ async def test_options_flow(recorder_mock: Recorder, hass: HomeAssistant) -> Non
|
||||
"query": "SELECT 5 as size",
|
||||
"column": "size",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": "{{ value }}",
|
||||
}
|
||||
|
||||
|
||||
@ -218,7 +250,6 @@ async def test_options_flow_name_previously_removed(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
title="Get Value Title",
|
||||
)
|
||||
@ -270,7 +301,6 @@ async def test_options_flow_fails_db_url(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
@ -314,7 +344,6 @@ async def test_options_flow_fails_invalid_query(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
@ -369,7 +398,6 @@ async def test_options_flow_fails_invalid_column_name(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
@ -424,7 +452,6 @@ async def test_options_flow_db_url_empty(
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": "MiB",
|
||||
"value_template": None,
|
||||
},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
@ -500,8 +527,6 @@ async def test_full_flow_not_recorder_db(
|
||||
"db_url": "sqlite://path/to/db.db",
|
||||
"query": "SELECT 5 as value",
|
||||
"column": "value",
|
||||
"unit_of_measurement": None,
|
||||
"value_template": None,
|
||||
}
|
||||
|
||||
entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user