Compare commits

...

2 Commits

Author SHA1 Message Date
Ariel Ebersberger 7825792f2a Use a major version bump for the section rename migration 2026-06-29 17:49:48 +02:00
Ariel Ebersberger 3cb69dff34 Rename "advanced_options" section to "additional_options" in SQL 2026-06-29 13:36:16 +02:00
9 changed files with 157 additions and 100 deletions
+10 -3
View File
@@ -31,7 +31,7 @@ from homeassistant.helpers.trigger_template_entity import (
from homeassistant.helpers.typing import ConfigType
from .const import (
CONF_ADVANCED_OPTIONS,
CONF_ADDITIONAL_OPTIONS,
CONF_COLUMN_NAME,
CONF_QUERY,
DOMAIN,
@@ -120,7 +120,7 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
new_options[CONF_COLUMN_NAME] = old_options.get(CONF_COLUMN_NAME)
new_options[CONF_QUERY] = old_options.get(CONF_QUERY)
new_options[CONF_ADVANCED_OPTIONS] = {}
new_options[CONF_ADDITIONAL_OPTIONS] = {}
for key in (
CONF_VALUE_TEMPLATE,
@@ -129,12 +129,19 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
CONF_STATE_CLASS,
):
if (value := old_options.get(key)) is not None:
new_options[CONF_ADVANCED_OPTIONS][key] = value
new_options[CONF_ADDITIONAL_OPTIONS][key] = value
hass.config_entries.async_update_entry(
entry, data=new_data, options=new_options, version=2
)
if entry.version == 2:
new_options = {**entry.options}
# The "advanced_options" section was renamed to "additional_options"
if (additional := new_options.pop("advanced_options", None)) is not None:
new_options[CONF_ADDITIONAL_OPTIONS] = additional
hass.config_entries.async_update_entry(entry, options=new_options, version=3)
_LOGGER.debug(
"Migration to version %s.%s successful",
entry.version,
+9 -9
View File
@@ -32,7 +32,7 @@ from homeassistant.data_entry_flow import section
from homeassistant.exceptions import TemplateError
from homeassistant.helpers import selector
from .const import CONF_ADVANCED_OPTIONS, CONF_COLUMN_NAME, CONF_QUERY, DOMAIN
from .const import CONF_ADDITIONAL_OPTIONS, CONF_COLUMN_NAME, CONF_QUERY, DOMAIN
from .util import (
EmptyQueryError,
InvalidSqlQuery,
@@ -50,7 +50,7 @@ OPTIONS_SCHEMA: vol.Schema = vol.Schema(
{
vol.Required(CONF_QUERY): selector.TemplateSelector(),
vol.Required(CONF_COLUMN_NAME): selector.TextSelector(),
vol.Required(CONF_ADVANCED_OPTIONS): section(
vol.Required(CONF_ADDITIONAL_OPTIONS): section(
vol.Schema(
{
vol.Optional(CONF_VALUE_TEMPLATE): selector.TemplateSelector(),
@@ -164,7 +164,7 @@ def validate_query(db_url: str, query: str, column: str) -> bool:
class SQLConfigFlow(ConfigFlow, domain=DOMAIN):
"""Handle a config flow for SQL integration."""
VERSION = 2
VERSION = 3
data: dict[str, Any]
@@ -239,12 +239,12 @@ class SQLConfigFlow(ConfigFlow, domain=DOMAIN):
_LOGGER.debug("Invalid query: %s", err)
errors["query"] = "query_invalid"
mod_advanced_options = {
mod_additional_options = {
k: v
for k, v in user_input[CONF_ADVANCED_OPTIONS].items()
for k, v in user_input[CONF_ADDITIONAL_OPTIONS].items()
if v is not None
}
user_input[CONF_ADVANCED_OPTIONS] = mod_advanced_options
user_input[CONF_ADDITIONAL_OPTIONS] = mod_additional_options
if not errors:
name = self.data[CONF_NAME]
@@ -305,12 +305,12 @@ class SQLOptionsFlowHandler(OptionsFlowWithReload):
recorder_db,
)
mod_advanced_options = {
mod_additional_options = {
k: v
for k, v in user_input[CONF_ADVANCED_OPTIONS].items()
for k, v in user_input[CONF_ADDITIONAL_OPTIONS].items()
if v is not None
}
user_input[CONF_ADVANCED_OPTIONS] = mod_advanced_options
user_input[CONF_ADDITIONAL_OPTIONS] = mod_additional_options
return self.async_create_entry(
data=user_input,
+1 -1
View File
@@ -9,5 +9,5 @@ PLATFORMS = [Platform.SENSOR]
CONF_COLUMN_NAME = "column"
CONF_QUERY = "query"
CONF_ADVANCED_OPTIONS = "advanced_options"
CONF_ADDITIONAL_OPTIONS = "additional_options"
DB_URL_RE = re.compile("//.*:.*@")
+6 -4
View File
@@ -36,7 +36,7 @@ from homeassistant.helpers.trigger_template_entity import (
)
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
from .const import CONF_ADVANCED_OPTIONS, CONF_COLUMN_NAME, CONF_QUERY, DOMAIN
from .const import CONF_ADDITIONAL_OPTIONS, CONF_COLUMN_NAME, CONF_QUERY, DOMAIN
from .util import (
InvalidSqlQuery,
async_create_sessionmaker,
@@ -115,7 +115,9 @@ async def async_setup_entry(
db_url: str = resolve_db_url(hass, entry.data.get(CONF_DB_URL))
name: str = entry.title
query_str: str = entry.options[CONF_QUERY]
template: str | None = entry.options[CONF_ADVANCED_OPTIONS].get(CONF_VALUE_TEMPLATE)
template: str | None = entry.options[CONF_ADDITIONAL_OPTIONS].get(
CONF_VALUE_TEMPLATE
)
column_name: str = entry.options[CONF_COLUMN_NAME]
query_template: ValueTemplate | None = None
@@ -136,9 +138,9 @@ async def async_setup_entry(
name_template = Template(name, hass)
trigger_entity_config = {CONF_NAME: name_template, CONF_UNIQUE_ID: entry.entry_id}
for key in TRIGGER_ENTITY_OPTIONS:
if key not in entry.options[CONF_ADVANCED_OPTIONS]:
if key not in entry.options[CONF_ADDITIONAL_OPTIONS]:
continue
trigger_entity_config[key] = entry.options[CONF_ADVANCED_OPTIONS][key]
trigger_entity_config[key] = entry.options[CONF_ADDITIONAL_OPTIONS][key]
await async_setup_sensor(
hass,
+12 -12
View File
@@ -21,7 +21,7 @@
"query": "Query to run, needs to start with 'SELECT'"
},
"sections": {
"advanced_options": {
"additional_options": {
"data": {
"device_class": "Device class",
"state_class": "State class",
@@ -87,21 +87,21 @@
"query": "[%key:component::sql::config::step::options::data_description::query%]"
},
"sections": {
"advanced_options": {
"additional_options": {
"data": {
"device_class": "[%key:component::sql::config::step::options::sections::advanced_options::data::device_class%]",
"state_class": "[%key:component::sql::config::step::options::sections::advanced_options::data::state_class%]",
"unit_of_measurement": "[%key:component::sql::config::step::options::sections::advanced_options::data::unit_of_measurement%]",
"value_template": "[%key:component::sql::config::step::options::sections::advanced_options::data::value_template%]"
"device_class": "[%key:component::sql::config::step::options::sections::additional_options::data::device_class%]",
"state_class": "[%key:component::sql::config::step::options::sections::additional_options::data::state_class%]",
"unit_of_measurement": "[%key:component::sql::config::step::options::sections::additional_options::data::unit_of_measurement%]",
"value_template": "[%key:component::sql::config::step::options::sections::additional_options::data::value_template%]"
},
"data_description": {
"device_class": "[%key:component::sql::config::step::options::sections::advanced_options::data_description::device_class%]",
"state_class": "[%key:component::sql::config::step::options::sections::advanced_options::data_description::state_class%]",
"unit_of_measurement": "[%key:component::sql::config::step::options::sections::advanced_options::data_description::unit_of_measurement%]",
"value_template": "[%key:component::sql::config::step::options::sections::advanced_options::data_description::value_template%]"
"device_class": "[%key:component::sql::config::step::options::sections::additional_options::data_description::device_class%]",
"state_class": "[%key:component::sql::config::step::options::sections::additional_options::data_description::state_class%]",
"unit_of_measurement": "[%key:component::sql::config::step::options::sections::additional_options::data_description::unit_of_measurement%]",
"value_template": "[%key:component::sql::config::step::options::sections::additional_options::data_description::value_template%]"
},
"description": "[%key:component::sql::config::step::options::sections::advanced_options::name%]",
"name": "[%key:component::sql::config::step::options::sections::advanced_options::name%]"
"description": "[%key:component::sql::config::step::options::sections::additional_options::name%]",
"name": "[%key:component::sql::config::step::options::sections::additional_options::name%]"
}
}
}
+26 -26
View File
@@ -9,7 +9,7 @@ from homeassistant.components.sensor import (
SensorStateClass,
)
from homeassistant.components.sql.const import (
CONF_ADVANCED_OPTIONS,
CONF_ADDITIONAL_OPTIONS,
CONF_COLUMN_NAME,
CONF_QUERY,
DOMAIN,
@@ -35,7 +35,7 @@ from tests.common import MockConfigEntry
ENTRY_CONFIG = {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -46,7 +46,7 @@ ENTRY_CONFIG_BLANK_QUERY = {
CONF_NAME: "Get Value",
CONF_QUERY: " ",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -56,7 +56,7 @@ ENTRY_CONFIG_BLANK_QUERY = {
ENTRY_CONFIG_WITH_VALUE_TEMPLATE = {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -68,7 +68,7 @@ ENTRY_CONFIG_WITH_QUERY_TEMPLATE = {
" 5 {% else %} 6 {% endif %} as value"
),
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -77,7 +77,7 @@ ENTRY_CONFIG_WITH_QUERY_TEMPLATE = {
ENTRY_CONFIG_WITH_BROKEN_QUERY_TEMPLATE = {
CONF_QUERY: "SELECT {{ 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -86,7 +86,7 @@ ENTRY_CONFIG_WITH_BROKEN_QUERY_TEMPLATE = {
ENTRY_CONFIG_WITH_BROKEN_QUERY_TEMPLATE_OPT = {
CONF_QUERY: "SELECT {{ 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -95,7 +95,7 @@ ENTRY_CONFIG_WITH_BROKEN_QUERY_TEMPLATE_OPT = {
ENTRY_CONFIG_INVALID_QUERY = {
CONF_QUERY: "SELECT 5 FROM as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -104,7 +104,7 @@ ENTRY_CONFIG_INVALID_QUERY = {
ENTRY_CONFIG_INVALID_QUERY_2 = {
CONF_QUERY: "SELECT5 FROM as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -113,7 +113,7 @@ ENTRY_CONFIG_INVALID_QUERY_2 = {
ENTRY_CONFIG_INVALID_QUERY_3 = {
CONF_QUERY: ";;",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -122,7 +122,7 @@ ENTRY_CONFIG_INVALID_QUERY_3 = {
ENTRY_CONFIG_INVALID_QUERY_OPT = {
CONF_QUERY: "SELECT 5 FROM as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -131,7 +131,7 @@ ENTRY_CONFIG_INVALID_QUERY_OPT = {
ENTRY_CONFIG_INVALID_QUERY_2_OPT = {
CONF_QUERY: "SELECT5 FROM as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -140,7 +140,7 @@ ENTRY_CONFIG_INVALID_QUERY_2_OPT = {
ENTRY_CONFIG_INVALID_QUERY_3_OPT = {
CONF_QUERY: ";;",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -152,7 +152,7 @@ ENTRY_CONFIG_QUERY_READ_ONLY_CTE = {
" SELECT state FROM test WHERE row_num = 1 LIMIT 1;"
),
CONF_COLUMN_NAME: "state",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -160,7 +160,7 @@ ENTRY_CONFIG_QUERY_READ_ONLY_CTE = {
ENTRY_CONFIG_QUERY_NO_READ_ONLY = {
CONF_QUERY: "UPDATE states SET state = 999999 WHERE state_id = 11125",
CONF_COLUMN_NAME: "state",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -171,7 +171,7 @@ ENTRY_CONFIG_QUERY_NO_READ_ONLY_CTE = {
" UPDATE states SET states.state = test.state;"
),
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -182,7 +182,7 @@ ENTRY_CONFIG_QUERY_READ_ONLY_CTE_OPT = {
" SELECT state FROM test WHERE row_num = 1 LIMIT 1;"
),
CONF_COLUMN_NAME: "state",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -190,7 +190,7 @@ ENTRY_CONFIG_QUERY_READ_ONLY_CTE_OPT = {
ENTRY_CONFIG_QUERY_NO_READ_ONLY_OPT = {
CONF_QUERY: "UPDATE 5 as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -201,7 +201,7 @@ ENTRY_CONFIG_QUERY_NO_READ_ONLY_CTE_OPT = {
" UPDATE states SET states.state = test.state;"
),
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -210,7 +210,7 @@ ENTRY_CONFIG_QUERY_NO_READ_ONLY_CTE_OPT = {
ENTRY_CONFIG_MULTIPLE_QUERIES = {
CONF_QUERY: "SELECT 5 as state; UPDATE states SET state = 10;",
CONF_COLUMN_NAME: "state",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -219,7 +219,7 @@ ENTRY_CONFIG_MULTIPLE_QUERIES = {
ENTRY_CONFIG_MULTIPLE_QUERIES_OPT = {
CONF_QUERY: "SELECT 5 as state; UPDATE states SET state = 10;",
CONF_COLUMN_NAME: "state",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -228,7 +228,7 @@ ENTRY_CONFIG_MULTIPLE_QUERIES_OPT = {
ENTRY_CONFIG_INVALID_COLUMN_NAME = {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -236,7 +236,7 @@ ENTRY_CONFIG_INVALID_COLUMN_NAME = {
ENTRY_CONFIG_INVALID_COLUMN_NAME_OPT = {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -244,7 +244,7 @@ ENTRY_CONFIG_INVALID_COLUMN_NAME_OPT = {
ENTRY_CONFIG_NO_RESULTS = {
CONF_QUERY: "SELECT kalle as value from no_table;",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -365,8 +365,8 @@ async def init_integration(
"""Set up the SQL integration in Home Assistant."""
if not options:
options = ENTRY_CONFIG
if CONF_ADVANCED_OPTIONS not in options:
options[CONF_ADVANCED_OPTIONS] = {}
if CONF_ADDITIONAL_OPTIONS not in options:
options[CONF_ADDITIONAL_OPTIONS] = {}
config_entry = MockConfigEntry(
title=title,
+33 -33
View File
@@ -16,7 +16,7 @@ from homeassistant.components.sensor import (
SensorStateClass,
)
from homeassistant.components.sql.const import (
CONF_ADVANCED_OPTIONS,
CONF_ADDITIONAL_OPTIONS,
CONF_COLUMN_NAME,
CONF_QUERY,
DOMAIN,
@@ -100,7 +100,7 @@ async def test_form_simple(
assert result["options"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -141,7 +141,7 @@ async def test_form_with_query_template(
" 5 {% else %} 6 {% endif %} as value"
),
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -188,7 +188,7 @@ async def test_form_with_broken_query_template(
" 5 {% else %} 6 {% endif %} as value"
),
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -225,7 +225,7 @@ async def test_form_with_value_template(
assert result["options"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
},
@@ -348,7 +348,7 @@ async def test_flow_fails_invalid_query(hass: HomeAssistant) -> None:
assert result["options"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -391,7 +391,7 @@ async def test_flow_fails_invalid_column_name(hass: HomeAssistant) -> None:
assert result["options"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -407,7 +407,7 @@ async def test_options_flow(hass: HomeAssistant) -> None:
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -430,7 +430,7 @@ async def test_options_flow(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
@@ -443,7 +443,7 @@ async def test_options_flow(hass: HomeAssistant) -> None:
assert result["data"] == {
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_VALUE_TEMPLATE: "{{ value }}",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
@@ -460,7 +460,7 @@ async def test_options_flow_name_previously_removed(hass: HomeAssistant) -> None
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -482,7 +482,7 @@ async def test_options_flow_name_previously_removed(hass: HomeAssistant) -> None
user_input={
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -493,7 +493,7 @@ async def test_options_flow_name_previously_removed(hass: HomeAssistant) -> None
assert result["data"] == {
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -507,7 +507,7 @@ async def test_options_flow_fails_db_url(hass: HomeAssistant) -> None:
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -529,7 +529,7 @@ async def test_options_flow_fails_db_url(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -546,7 +546,7 @@ async def test_options_flow_fails_invalid_query(hass: HomeAssistant) -> None:
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -630,7 +630,7 @@ async def test_options_flow_fails_invalid_query(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -640,7 +640,7 @@ async def test_options_flow_fails_invalid_query(hass: HomeAssistant) -> None:
assert result["data"] == {
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -654,7 +654,7 @@ async def test_options_flow_fails_invalid_column_name(hass: HomeAssistant) -> No
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -682,7 +682,7 @@ async def test_options_flow_fails_invalid_column_name(hass: HomeAssistant) -> No
user_input={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -692,7 +692,7 @@ async def test_options_flow_fails_invalid_column_name(hass: HomeAssistant) -> No
assert result["data"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -706,7 +706,7 @@ async def test_options_flow_db_url_empty(hass: HomeAssistant) -> None:
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -727,7 +727,7 @@ async def test_options_flow_db_url_empty(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -738,7 +738,7 @@ async def test_options_flow_db_url_empty(hass: HomeAssistant) -> None:
assert result["data"] == {
CONF_QUERY: "SELECT 5 as size",
CONF_COLUMN_NAME: "size",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -770,7 +770,7 @@ async def test_full_flow_not_recorder_db(
{
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {},
CONF_ADDITIONAL_OPTIONS: {},
},
)
await hass.async_block_till_done()
@@ -781,7 +781,7 @@ async def test_full_flow_not_recorder_db(
assert result["options"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {},
CONF_ADDITIONAL_OPTIONS: {},
}
entry = hass.config_entries.async_entries(DOMAIN)[0]
@@ -796,7 +796,7 @@ async def test_full_flow_not_recorder_db(
user_input={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -807,7 +807,7 @@ async def test_full_flow_not_recorder_db(
assert result["data"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
@@ -822,7 +822,7 @@ async def test_device_state_class(hass: HomeAssistant) -> None:
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -839,7 +839,7 @@ async def test_device_state_class(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -852,7 +852,7 @@ async def test_device_state_class(hass: HomeAssistant) -> None:
assert result["data"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -868,7 +868,7 @@ async def test_device_state_class(hass: HomeAssistant) -> None:
user_input={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},
@@ -881,7 +881,7 @@ async def test_device_state_class(hass: HomeAssistant) -> None:
assert result["data"] == {
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
}
+54 -6
View File
@@ -12,7 +12,7 @@ from homeassistant.components.sensor import (
SensorStateClass,
)
from homeassistant.components.sql.const import (
CONF_ADVANCED_OPTIONS,
CONF_ADDITIONAL_OPTIONS,
CONF_COLUMN_NAME,
CONF_QUERY,
DOMAIN,
@@ -122,10 +122,10 @@ async def test_migration_from_future(
options={
CONF_QUERY: "SELECT 5.01 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {},
CONF_ADDITIONAL_OPTIONS: {},
},
entry_id="1",
version=3,
version=4,
)
config_entry.add_to_hass(hass)
@@ -135,10 +135,10 @@ async def test_migration_from_future(
assert config_entry.state is ConfigEntryState.MIGRATION_ERROR
async def test_migration_from_v1_to_v2(
async def test_migration_from_v1_to_v3(
recorder_mock: Recorder, hass: HomeAssistant
) -> None:
"""Test migration from version 1 to 2."""
"""Test migration from version 1 to 3."""
config_entry = MockConfigEntry(
title="Test migration",
domain=DOMAIN,
@@ -163,12 +163,60 @@ async def test_migration_from_v1_to_v2(
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
assert config_entry.version == 3
assert config_entry.data == {}
assert config_entry.options == {
CONF_QUERY: "SELECT 5.01 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.MEASUREMENT,
},
}
state = hass.states.get("sensor.test_migration")
assert state.state == "5"
async def test_migration_from_v2_to_v3(
recorder_mock: Recorder, hass: HomeAssistant
) -> None:
"""Test migration from version 2 to 3 renames the options section."""
config_entry = MockConfigEntry(
title="Test migration",
domain=DOMAIN,
source=SOURCE_USER,
data={},
options={
CONF_QUERY: "SELECT 5.01 as value",
CONF_COLUMN_NAME: "value",
"advanced_options": {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.MEASUREMENT,
},
},
entry_id="1",
version=2,
minor_version=1,
)
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
assert config_entry.version == 3
assert "advanced_options" not in config_entry.options
assert config_entry.options == {
CONF_QUERY: "SELECT 5.01 as value",
CONF_COLUMN_NAME: "value",
CONF_ADDITIONAL_OPTIONS: {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
+6 -6
View File
@@ -18,7 +18,7 @@ from homeassistant.components.sensor import (
SensorStateClass,
)
from homeassistant.components.sql.const import (
CONF_ADVANCED_OPTIONS,
CONF_ADDITIONAL_OPTIONS,
CONF_COLUMN_NAME,
CONF_QUERY,
DOMAIN,
@@ -94,7 +94,7 @@ async def test_query_value_template(
options = {
CONF_QUERY: "SELECT 5.01 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
@@ -126,7 +126,7 @@ async def test_template_query(
" 5 {% else %} 6 {% endif %} as value"
),
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
},
}
@@ -168,7 +168,7 @@ async def test_broken_template_query(
options = {
CONF_QUERY: "SELECT {{ 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_VALUE_TEMPLATE: "{{ value | int }}",
},
}
@@ -672,7 +672,7 @@ async def test_attributes_from_entry_config(
options={
CONF_QUERY: "SELECT 5 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
CONF_DEVICE_CLASS: SensorDeviceClass.DATA_SIZE,
CONF_STATE_CLASS: SensorStateClass.TOTAL,
@@ -694,7 +694,7 @@ async def test_attributes_from_entry_config(
options={
CONF_QUERY: "SELECT 6 as value",
CONF_COLUMN_NAME: "value",
CONF_ADVANCED_OPTIONS: {
CONF_ADDITIONAL_OPTIONS: {
CONF_UNIT_OF_MEASUREMENT: "MiB",
},
},