1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-02 00:20:30 +01:00

Unprefix entity name for entity ID generation (#166900)

This commit is contained in:
Artur Pragacz
2026-03-31 09:05:39 +02:00
committed by GitHub
parent a71d48085a
commit de98bc7dcf
2 changed files with 94 additions and 0 deletions

View File

@@ -469,6 +469,7 @@ def _async_get_full_entity_name(
original_name: str | None,
original_name_unprefixed: str | None | UndefinedType = UNDEFINED,
overridden_name: str | None = None,
unprefix_name: bool = False,
use_legacy_naming: bool = False,
) -> str:
"""Get full name for an entity.
@@ -500,6 +501,10 @@ def _async_get_full_entity_name(
if original_name_unprefixed is not None
else original_name
)
elif unprefix_name:
unprefixed_name = _async_strip_prefix_from_entity_name(name, device_name)
if unprefixed_name is not None:
name = unprefixed_name
if not name:
name = device_name
@@ -1235,6 +1240,7 @@ class EntityRegistry(BaseRegistry):
name=name,
original_name=object_id_base,
overridden_name=suggested_object_id,
unprefix_name=True,
)
return self.async_get_available_entity_id(
domain,

View File

@@ -571,6 +571,94 @@ def test_get_available_entity_id_considers_existing_entities(
)
@pytest.mark.parametrize(
(
"device_name",
"object_id_base",
"suggested_object_id",
"user_name",
"expected_entity_id",
),
[
(
None,
"My Sensor",
None,
None,
"sensor.my_sensor",
),
(
"Living Room",
"Temperature",
None,
None,
"sensor.living_room_temperature",
),
(
"Living Room",
"Temperature",
"custom_id",
None,
"sensor.custom_id",
),
(
"Living Room",
"Temperature",
"custom_id",
"Humidity",
"sensor.living_room_humidity",
),
(
"Living Room",
"Temperature",
None,
"Living Room Sensor",
"sensor.living_room_sensor",
),
],
)
def test_regenerate_entity_id(
hass: HomeAssistant,
device_registry: dr.DeviceRegistry,
entity_registry: er.EntityRegistry,
device_name: str | None,
object_id_base: str | None,
suggested_object_id: str | None,
user_name: str | None,
expected_entity_id: str,
) -> None:
"""Test regenerating entity IDs."""
config_entry = MockConfigEntry(domain="sensor")
config_entry.add_to_hass(hass)
device_id: str | None = None
if device_name is not None:
device_entry = device_registry.async_get_or_create(
config_entry_id=config_entry.entry_id,
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
name=device_name,
)
device_id = device_entry.id
entry = entity_registry.async_get_or_create(
"sensor",
"test",
"1234",
config_entry=config_entry,
device_id=device_id,
has_entity_name=True,
object_id_base=object_id_base,
original_name=object_id_base,
suggested_object_id=suggested_object_id,
)
if user_name is not None:
entry = entity_registry.async_update_entity(entry.entity_id, name=user_name)
new_entity_id = entity_registry.async_regenerate_entity_id(entry)
assert new_entity_id == expected_entity_id
def test_is_registered(entity_registry: er.EntityRegistry) -> None:
"""Test that is_registered works."""
entry = entity_registry.async_get_or_create("light", "hue", "1234")