Remove not needed name from config flow in SMHI (#134841)

This commit is contained in:
G Johansson 2025-01-17 19:21:13 +01:00 committed by GitHub
parent 235fda55fe
commit 2ec971ad9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 41 additions and 51 deletions

View File

@ -32,6 +32,11 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Migrate old entry."""
if entry.version > 3:
# Downgrade from future version
return False
if entry.version == 1:
new_data = {
CONF_NAME: entry.data[CONF_NAME],
@ -40,8 +45,11 @@ async def async_migrate_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
CONF_LONGITUDE: entry.data[CONF_LONGITUDE],
},
}
hass.config_entries.async_update_entry(entry, data=new_data, version=2)
if not hass.config_entries.async_update_entry(entry, data=new_data, version=2):
return False
if entry.version == 2:
new_data = entry.data.copy()
new_data.pop(CONF_NAME)
hass.config_entries.async_update_entry(entry, data=new_data, version=3)
return True

View File

@ -9,7 +9,7 @@ import voluptuous as vol
from homeassistant.components.weather import DOMAIN as WEATHER_DOMAIN
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
from homeassistant.const import CONF_LATITUDE, CONF_LOCATION, CONF_LONGITUDE, CONF_NAME
from homeassistant.const import CONF_LATITUDE, CONF_LOCATION, CONF_LONGITUDE
from homeassistant.core import HomeAssistant
from homeassistant.helpers import (
aiohttp_client,
@ -38,7 +38,7 @@ async def async_check_location(
class SmhiFlowHandler(ConfigFlow, domain=DOMAIN):
"""Config flow for SMHI component."""
VERSION = 2
VERSION = 3
async def async_step_user(
self, user_input: dict[str, Any] | None = None
@ -58,10 +58,6 @@ class SmhiFlowHandler(ConfigFlow, domain=DOMAIN):
):
name = HOME_LOCATION_NAME
user_input[CONF_NAME] = (
HOME_LOCATION_NAME if name == HOME_LOCATION_NAME else DEFAULT_NAME
)
await self.async_set_unique_id(f"{lat}-{lon}")
self._abort_if_unique_id_configured()
return self.async_create_entry(title=name, data=user_input)

View File

@ -48,7 +48,6 @@ from homeassistant.const import (
CONF_LATITUDE,
CONF_LOCATION,
CONF_LONGITUDE,
CONF_NAME,
UnitOfLength,
UnitOfPrecipitationDepth,
UnitOfPressure,
@ -60,7 +59,7 @@ from homeassistant.helpers import aiohttp_client, sun
from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.event import async_call_later
from homeassistant.util import Throttle, dt as dt_util, slugify
from homeassistant.util import Throttle, dt as dt_util
from .const import ATTR_SMHI_THUNDER_PROBABILITY, DOMAIN, ENTITY_ID_SENSOR_FORMAT
@ -103,17 +102,15 @@ async def async_setup_entry(
) -> None:
"""Add a weather entity from map location."""
location = config_entry.data
name = slugify(location[CONF_NAME])
session = aiohttp_client.async_get_clientsession(hass)
entity = SmhiWeather(
location[CONF_NAME],
location[CONF_LOCATION][CONF_LATITUDE],
location[CONF_LOCATION][CONF_LONGITUDE],
session=session,
)
entity.entity_id = ENTITY_ID_SENSOR_FORMAT.format(name)
entity.entity_id = ENTITY_ID_SENSOR_FORMAT.format(config_entry.title)
async_add_entities([entity], True)
@ -136,7 +133,6 @@ class SmhiWeather(WeatherEntity):
def __init__(
self,
name: str,
latitude: str,
longitude: str,
session: aiohttp.ClientSession,
@ -152,7 +148,6 @@ class SmhiWeather(WeatherEntity):
identifiers={(DOMAIN, f"{latitude}, {longitude}")},
manufacturer="SMHI",
model="v2",
name=name,
configuration_url="http://opendata.smhi.se/apidocs/metfcst/parameters.html",
)

View File

@ -2,7 +2,6 @@
ENTITY_ID = "weather.smhi_test"
TEST_CONFIG = {
"name": "test",
"location": {
"longitude": "17.84197",
"latitude": "59.32624",
@ -11,5 +10,5 @@ TEST_CONFIG = {
TEST_CONFIG_MIGRATE = {
"name": "test",
"longitude": "17.84197",
"latitude": "17.84197",
"latitude": "59.32624",
}

View File

@ -57,7 +57,6 @@ async def test_form(hass: HomeAssistant) -> None:
"latitude": 0.0,
"longitude": 0.0,
},
"name": "Home",
}
assert len(mock_setup_entry.mock_calls) == 1
@ -93,7 +92,6 @@ async def test_form(hass: HomeAssistant) -> None:
"latitude": 1.0,
"longitude": 1.0,
},
"name": "Weather",
}
@ -150,7 +148,6 @@ async def test_form_invalid_coordinates(hass: HomeAssistant) -> None:
"latitude": 2.0,
"longitude": 2.0,
},
"name": "Weather",
}
@ -201,8 +198,8 @@ async def test_reconfigure_flow(
domain=DOMAIN,
title="Home",
unique_id="57.2898-13.6304",
data={"location": {"latitude": 57.2898, "longitude": 13.6304}, "name": "Home"},
version=2,
data={"location": {"latitude": 57.2898, "longitude": 13.6304}},
version=3,
)
entry.add_to_hass(hass)
@ -269,7 +266,6 @@ async def test_reconfigure_flow(
"latitude": 58.2898,
"longitude": 14.6304,
},
"name": "Home",
}
entity = entity_registry.async_get(entity.entity_id)
assert entity

View File

@ -1,10 +1,9 @@
"""Test SMHI component setup process."""
from unittest.mock import patch
from smhi.smhi_lib import APIURL_TEMPLATE
from homeassistant.components.smhi.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
@ -22,7 +21,7 @@ async def test_setup_entry(
TEST_CONFIG["location"]["longitude"], TEST_CONFIG["location"]["latitude"]
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain=DOMAIN, title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -40,7 +39,7 @@ async def test_remove_entry(
TEST_CONFIG["location"]["longitude"], TEST_CONFIG["location"]["latitude"]
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain=DOMAIN, title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -77,7 +76,7 @@ async def test_migrate_entry(
original_name="Weather",
platform="smhi",
supported_features=0,
unique_id="17.84197, 17.84197",
unique_id="59.32624, 17.84197",
)
await hass.config_entries.async_setup(entry.entry_id)
@ -86,30 +85,27 @@ async def test_migrate_entry(
state = hass.states.get(entity.entity_id)
assert state
assert entry.version == 2
assert entry.unique_id == "17.84197-17.84197"
assert entry.version == 3
assert entry.unique_id == "59.32624-17.84197"
assert entry.data == TEST_CONFIG
entity_get = entity_registry.async_get(entity.entity_id)
assert entity_get.unique_id == "17.84197, 17.84197"
assert entity_get.unique_id == "59.32624, 17.84197"
async def test_migrate_entry_failed(
async def test_migrate_from_future_version(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, api_response: str
) -> None:
"""Test migrate entry data that fails."""
"""Test migrate entry not possible from future version."""
uri = APIURL_TEMPLATE.format(
TEST_CONFIG_MIGRATE["longitude"], TEST_CONFIG_MIGRATE["latitude"]
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG_MIGRATE)
entry = MockConfigEntry(domain=DOMAIN, data=TEST_CONFIG_MIGRATE, version=4)
entry.add_to_hass(hass)
assert entry.version == 1
assert entry.version == 4
with patch(
"homeassistant.config_entries.ConfigEntries.async_update_entry",
return_value=False,
):
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
assert entry.version == 1
assert entry.state == ConfigEntryState.MIGRATION_ERROR

View File

@ -49,7 +49,7 @@ async def test_setup_hass(
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -80,7 +80,7 @@ async def test_clear_night(
)
aioclient_mock.get(uri, text=api_response_night)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -105,7 +105,7 @@ async def test_clear_night(
async def test_properties_no_data(hass: HomeAssistant) -> None:
"""Test properties when no API data available."""
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
with patch(
@ -193,7 +193,7 @@ async def test_properties_unknown_symbol(hass: HomeAssistant) -> None:
testdata = [data, data2, data3]
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
with (
@ -232,7 +232,7 @@ async def test_refresh_weather_forecast_retry(
hass: HomeAssistant, error: Exception
) -> None:
"""Test the refresh weather forecast function."""
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
now = dt_util.utcnow()
@ -357,7 +357,7 @@ async def test_custom_speed_unit(
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -394,7 +394,7 @@ async def test_forecast_services(
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -458,7 +458,7 @@ async def test_forecast_services_lack_of_data(
)
aioclient_mock.get(uri, text=api_response_lack_data)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)
@ -503,7 +503,7 @@ async def test_forecast_service(
)
aioclient_mock.get(uri, text=api_response)
entry = MockConfigEntry(domain="smhi", data=TEST_CONFIG, version=2)
entry = MockConfigEntry(domain="smhi", title="test", data=TEST_CONFIG, version=3)
entry.add_to_hass(hass)
await hass.config_entries.async_setup(entry.entry_id)