1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 17:49:37 +01:00

Use legacy naming for entities (#166696)

This commit is contained in:
Artur Pragacz
2026-03-27 19:45:39 +01:00
committed by GitHub
parent b39c83efd2
commit 894e9bab0a
5 changed files with 174 additions and 484 deletions
+123 -427
View File
@@ -684,7 +684,6 @@ async def test_load_bad_data(
"labels": [],
"modified_at": "2024-02-14T12:00:00.900075+00:00",
"name": None,
"name_v2": None,
"object_id_base": None,
"options": None,
"original_device_class": None,
@@ -719,7 +718,6 @@ async def test_load_bad_data(
"labels": [],
"modified_at": "2024-02-14T12:00:00.900075+00:00",
"name": None,
"name_v2": None,
"object_id_base": None,
"options": None,
"original_device_class": None,
@@ -754,7 +752,6 @@ async def test_load_bad_data(
"labels": [],
"modified_at": "2024-02-14T12:00:00.900075+00:00",
"name": None,
"name_v2": None,
"options": None,
"options_undefined": False,
"orphaned_timestamp": None,
@@ -780,7 +777,6 @@ async def test_load_bad_data(
"labels": [],
"modified_at": "2024-02-14T12:00:00.900075+00:00",
"name": None,
"name_v2": None,
"options": None,
"options_undefined": False,
"orphaned_timestamp": None,
@@ -1135,7 +1131,6 @@ async def test_migration_1_1(hass: HomeAssistant, hass_storage: dict[str, Any])
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"object_id_base": None,
"options": {},
"original_device_class": "best_class",
@@ -1331,7 +1326,6 @@ async def test_migration_1_11(
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"object_id_base": None,
"options": {},
"original_device_class": "best_class",
@@ -1367,7 +1361,6 @@ async def test_migration_1_11(
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"options": {},
"options_undefined": True,
"orphaned_timestamp": None,
@@ -1500,7 +1493,6 @@ async def test_migration_1_18(
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"object_id_base": "Test Entity",
"options": {},
"original_device_class": "best_class",
@@ -1536,7 +1528,6 @@ async def test_migration_1_18(
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"options": {},
"options_undefined": False,
"orphaned_timestamp": None,
@@ -1554,10 +1545,14 @@ async def test_migration_1_18(
@pytest.mark.parametrize("load_registries", [False])
async def test_migration_1_20(
hass: HomeAssistant, hass_storage: dict[str, Any]
async def test_migration_1_21(
hass: HomeAssistant,
hass_storage: dict[str, Any],
) -> None:
"""Test migration from version 1.20."""
"""Test migration from version 1.21.
Version 1.21 stored entity names in a new format, but was reverted.
"""
hass_storage[dr.STORAGE_KEY] = {
"version": dr.STORAGE_VERSION_MAJOR,
"minor_version": dr.STORAGE_VERSION_MINOR,
@@ -1565,24 +1560,25 @@ async def test_migration_1_20(
"devices": [
{
"area_id": None,
"config_entries": ["mock-config-entry"],
"config_entries_subentries": {"mock-config-entry": [None]},
"config_entries": ["mock_entry"],
"config_entries_subentries": {"mock_entry": [None]},
"configuration_url": None,
"connections": [],
"created_at": "1970-01-01T00:00:00+00:00",
"disabled_by": None,
"disabled_by_undefined": False,
"entry_type": None,
"hw_version": None,
"id": "device-1",
"identifiers": [["test", "device-1"]],
"id": "device_1234",
"identifiers": [["test", "device_1"]],
"labels": [],
"manufacturer": None,
"model": None,
"model_id": None,
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "My Device",
"name_by_user": None,
"primary_config_entry": "mock-config-entry",
"name": "My Device",
"primary_config_entry": "mock_entry",
"serial_number": None,
"sw_version": None,
"via_device_id": None,
@@ -1591,238 +1587,121 @@ async def test_migration_1_20(
"deleted_devices": [],
},
}
dr.async_setup(hass)
await dr.async_load(hass)
# Entity registry data at version 1.20
entity_base = {
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device_1234",
"disabled_by": None,
"entity_category": None,
"has_entity_name": False,
"hidden_by": None,
"icon": None,
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"object_id_base": "Temperature",
"options": {},
"original_device_class": "temperature",
"original_icon": None,
"original_name": "Temperature",
"platform": "super_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unit_of_measurement": None,
"device_class": None,
}
hass_storage[er.STORAGE_KEY] = {
"version": 1,
"minor_version": 20,
"minor_version": 21,
"data": {
"entities": [
{
# Entity with name=None
# name should be preserved
# should add None to aliases
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.entity_name_no_custom",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-1",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-1",
"unit_of_measurement": None,
"device_class": None,
},
{
# Entity with no device_id
# name should be preserved
# should add None to aliases
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": None,
"disabled_by": None,
"entity_category": None,
"entity_id": "test.no_device",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-2",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Standalone Sensor",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-2",
"unit_of_measurement": None,
"device_class": None,
},
{
# Entity with name starting with device name
# name should be stripped to remove device name prefix
# should add None to aliases
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.name_with_device_prefix",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-3",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "My device temperature",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-3",
"unit_of_measurement": None,
"device_class": None,
},
{
# Entity with custom name not starting with device name
# not exposed to any voice assistant
# name should be preserved
# should add None to aliases
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
**entity_base,
"entity_id": "test.custom_name",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-4",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Living Room Light",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-4",
"unit_of_measurement": None,
"device_class": None,
"id": "entity_custom_name",
"unique_id": "custom_name",
"name": "My Custom Name",
"name_v2": "My Custom Name",
},
{
# Entity with custom name not starting with device name
# exposed to conversation assistant
# name should be preserved
# should add name to aliases
"aliases": [],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.custom_name_exposed",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-5",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Living Room Light",
"object_id_base": "Test entity",
"options": {
"conversation": {"should_expose": True},
},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-5",
"unit_of_measurement": None,
"device_class": None,
**entity_base,
"entity_id": "test.stripped",
"id": "entity_stripped",
"unique_id": "stripped",
"name": "My Device Temperature",
"name_v2": "Temperature",
},
{
**entity_base,
"entity_id": "test.stripped_and_renamed",
"id": "entity_stripped_and_renamed",
"unique_id": "stripped_and_renamed",
"name": "My Device Temperature",
"name_v2": "Heat",
},
],
"deleted_entities": [
{
# Deleted entity
# name should be reset to None
# should add None to aliases
"aliases": ["deleted_alias"],
"area_id": None,
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_class": None,
"disabled_by": None,
"disabled_by_undefined": False,
"entity_id": "test.deleted_entity",
"hidden_by": None,
"hidden_by_undefined": False,
"icon": None,
"id": "deleted-1",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Deleted Name",
"options": {},
"options_undefined": False,
"orphaned_timestamp": None,
"platform": "test_platform",
"unique_id": "deleted-unique",
}
],
"deleted_entities": [],
},
}
await er.async_load(hass)
registry = er.async_get(hass)
entry = registry.async_get_or_create("test", "super_platform", "custom_name")
assert entry.name == "My Custom Name"
entry = registry.async_get_or_create("test", "super_platform", "stripped")
assert entry.name == "My Device Temperature"
entry = registry.async_get_or_create(
"test", "super_platform", "stripped_and_renamed"
)
assert entry.name == "My Device Heat"
# Check migrated data
await flush_store(registry._store)
migrated_data = hass_storage[er.STORAGE_KEY]
migrated_entity_base = {
"aliases": [],
"aliases_v2": [None],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device_1234",
"disabled_by": None,
"entity_category": None,
"has_entity_name": False,
"hidden_by": None,
"icon": None,
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"object_id_base": "Temperature",
"options": {},
"original_device_class": "temperature",
"original_icon": None,
"original_name": "Temperature",
"platform": "super_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unit_of_measurement": None,
"device_class": None,
}
assert migrated_data == {
"version": er.STORAGE_VERSION_MAJOR,
"minor_version": er.STORAGE_VERSION_MINOR,
@@ -1830,211 +1709,28 @@ async def test_migration_1_20(
"data": {
"entities": [
{
"aliases": [],
"aliases_v2": [None],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.entity_name_no_custom",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-1",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": None,
"name_v2": None,
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-1",
"unit_of_measurement": None,
"device_class": None,
},
{
"aliases": [],
"aliases_v2": [None],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": None,
"disabled_by": None,
"entity_category": None,
"entity_id": "test.no_device",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-2",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Standalone Sensor",
"name_v2": "Standalone Sensor",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-2",
"unit_of_measurement": None,
"device_class": None,
},
{
"aliases": [],
"aliases_v2": [None],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.name_with_device_prefix",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-3",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "My device temperature",
"name_v2": "Temperature",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-3",
"unit_of_measurement": None,
"device_class": None,
},
{
"aliases": [],
"aliases_v2": [None],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
**migrated_entity_base,
"entity_id": "test.custom_name",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-4",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Living Room Light",
"name_v2": "Living Room Light",
"object_id_base": "Test entity",
"options": {},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-4",
"unit_of_measurement": None,
"device_class": None,
"id": "entity_custom_name",
"unique_id": "custom_name",
"name": "My Custom Name",
},
{
"aliases": [],
"aliases_v2": ["Living Room Light"],
"area_id": None,
"capabilities": {},
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_id": "device-1",
"disabled_by": None,
"entity_category": None,
"entity_id": "test.custom_name_exposed",
"has_entity_name": True,
"hidden_by": None,
"icon": None,
"id": "entity-5",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Living Room Light",
"name_v2": "Living Room Light",
"object_id_base": "Test entity",
"options": {
"conversation": {"should_expose": True},
},
"original_device_class": None,
"original_icon": None,
"original_name": "Test entity",
"platform": "test_platform",
"previous_unique_id": None,
"suggested_object_id": None,
"supported_features": 0,
"translation_key": None,
"unique_id": "unique-5",
"unit_of_measurement": None,
"device_class": None,
**migrated_entity_base,
"entity_id": "test.stripped",
"id": "entity_stripped",
"unique_id": "stripped",
"name": "My Device Temperature",
},
],
"deleted_entities": [
{
"aliases": ["deleted_alias"],
"aliases_v2": [None, "deleted_alias"],
"area_id": None,
"categories": {},
"config_entry_id": None,
"config_subentry_id": None,
"created_at": "1970-01-01T00:00:00+00:00",
"device_class": None,
"disabled_by": None,
"disabled_by_undefined": False,
"entity_id": "test.deleted_entity",
"hidden_by": None,
"hidden_by_undefined": False,
"icon": None,
"id": "deleted-1",
"labels": [],
"modified_at": "1970-01-01T00:00:00+00:00",
"name": "Deleted Name",
"name_v2": None,
"options": {},
"options_undefined": False,
"orphaned_timestamp": None,
"platform": "test_platform",
"unique_id": "deleted-unique",
**migrated_entity_base,
"entity_id": "test.stripped_and_renamed",
"id": "entity_stripped_and_renamed",
"unique_id": "stripped_and_renamed",
"name": "My Device Heat",
},
],
"deleted_entities": [],
},
}
@@ -3353,7 +3049,7 @@ async def test_has_entity_name_false_device_name_changes(
assert updated.original_name_unprefixed == "Light Temperature"
updated2 = entity_registry.async_get(entry2.entity_id)
assert updated2.name == "Brightness"
assert updated2.name == "Hue Brightness"
assert updated2.original_name_unprefixed is None
updated3 = entity_registry.async_get(entry3.entity_id)