mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 00:37:53 +00:00
Remove implict name check from Entity base class (#101905)
This commit is contained in:
parent
d0fb994199
commit
e5ebdf7ad4
@ -268,9 +268,6 @@ class Entity(ABC):
|
||||
# it should be using async_write_ha_state.
|
||||
_async_update_ha_state_reported = False
|
||||
|
||||
# If we reported this entity is implicitly using device name
|
||||
_implicit_device_name_reported = False
|
||||
|
||||
# If we reported this entity was added without its platform set
|
||||
_no_platform_reported = False
|
||||
|
||||
@ -358,22 +355,6 @@ class Entity(ABC):
|
||||
"""Return a unique ID."""
|
||||
return self._attr_unique_id
|
||||
|
||||
def _report_implicit_device_name(self) -> None:
|
||||
"""Report entities which use implicit device name."""
|
||||
if self._implicit_device_name_reported:
|
||||
return
|
||||
report_issue = self._suggest_report_issue()
|
||||
_LOGGER.warning(
|
||||
(
|
||||
"Entity %s (%s) is implicitly using device name by not setting its "
|
||||
"name. Instead, the name should be set to None, please %s"
|
||||
),
|
||||
self.entity_id,
|
||||
type(self),
|
||||
report_issue,
|
||||
)
|
||||
self._implicit_device_name_reported = True
|
||||
|
||||
@property
|
||||
def use_device_name(self) -> bool:
|
||||
"""Return if this entity does not have its own name.
|
||||
@ -388,20 +369,8 @@ class Entity(ABC):
|
||||
return False
|
||||
|
||||
if hasattr(self, "entity_description"):
|
||||
if not (name := self.entity_description.name):
|
||||
return True
|
||||
if name is UNDEFINED and not self._default_to_device_class_name():
|
||||
# Backwards compatibility with leaving EntityDescription.name unassigned
|
||||
# for device name.
|
||||
# Deprecated in HA Core 2023.6, remove in HA Core 2023.9
|
||||
self._report_implicit_device_name()
|
||||
return True
|
||||
return False
|
||||
if self.name is UNDEFINED and not self._default_to_device_class_name():
|
||||
# Backwards compatibility with not overriding name property for device name.
|
||||
# Deprecated in HA Core 2023.6, remove in HA Core 2023.9
|
||||
self._report_implicit_device_name()
|
||||
return True
|
||||
return not self.entity_description.name
|
||||
|
||||
return not self.name
|
||||
|
||||
@property
|
||||
|
@ -956,17 +956,11 @@ async def test_entity_description_fallback() -> None:
|
||||
|
||||
async def _test_friendly_name(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
ent: entity.Entity,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name."""
|
||||
|
||||
expected_warning = (
|
||||
f"Entity {ent.entity_id} ({type(ent)}) is implicitly using device name"
|
||||
)
|
||||
|
||||
async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
"""Mock setup entry method."""
|
||||
async_add_entities([ent])
|
||||
@ -985,7 +979,6 @@ async def _test_friendly_name(
|
||||
assert len(hass.states.async_entity_ids()) == 1
|
||||
state = hass.states.async_all()[0]
|
||||
assert state.attributes.get(ATTR_FRIENDLY_NAME) == expected_friendly_name
|
||||
assert (expected_warning in caplog.text) is warn_implicit_name
|
||||
|
||||
await async_update_entity(hass, ent.entity_id)
|
||||
assert state.attributes.get(ATTR_FRIENDLY_NAME) == expected_friendly_name
|
||||
@ -997,25 +990,22 @@ async def _test_friendly_name(
|
||||
"entity_name",
|
||||
"device_name",
|
||||
"expected_friendly_name",
|
||||
"warn_implicit_name",
|
||||
),
|
||||
(
|
||||
(False, "Entity Blu", "Device Bla", "Entity Blu", False),
|
||||
(False, None, "Device Bla", None, False),
|
||||
(True, "Entity Blu", "Device Bla", "Device Bla Entity Blu", False),
|
||||
(True, None, "Device Bla", "Device Bla", False),
|
||||
(True, "Entity Blu", UNDEFINED, "Entity Blu", False),
|
||||
(True, "Entity Blu", None, "Mock Title Entity Blu", False),
|
||||
(False, "Entity Blu", "Device Bla", "Entity Blu"),
|
||||
(False, None, "Device Bla", None),
|
||||
(True, "Entity Blu", "Device Bla", "Device Bla Entity Blu"),
|
||||
(True, None, "Device Bla", "Device Bla"),
|
||||
(True, "Entity Blu", UNDEFINED, "Entity Blu"),
|
||||
(True, "Entity Blu", None, "Mock Title Entity Blu"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_attr(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
entity_name: str | None,
|
||||
device_name: str | None | UndefinedType,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity uses _attr_*."""
|
||||
|
||||
@ -1031,31 +1021,27 @@ async def test_friendly_name_attr(
|
||||
ent._attr_name = entity_name
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("has_entity_name", "entity_name", "expected_friendly_name", "warn_implicit_name"),
|
||||
("has_entity_name", "entity_name", "expected_friendly_name"),
|
||||
(
|
||||
(False, "Entity Blu", "Entity Blu", False),
|
||||
(False, None, None, False),
|
||||
(False, UNDEFINED, None, False),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu", False),
|
||||
(True, None, "Device Bla", False),
|
||||
(True, UNDEFINED, "Device Bla", True),
|
||||
(False, "Entity Blu", "Entity Blu"),
|
||||
(False, None, None),
|
||||
(False, UNDEFINED, None),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu"),
|
||||
(True, None, "Device Bla"),
|
||||
(True, UNDEFINED, "Device Bla None"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_description(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
entity_name: str | None,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity has an entity description."""
|
||||
|
||||
@ -1072,31 +1058,27 @@ async def test_friendly_name_description(
|
||||
)
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("has_entity_name", "entity_name", "expected_friendly_name", "warn_implicit_name"),
|
||||
("has_entity_name", "entity_name", "expected_friendly_name"),
|
||||
(
|
||||
(False, "Entity Blu", "Entity Blu", False),
|
||||
(False, None, None, False),
|
||||
(False, UNDEFINED, None, False),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu", False),
|
||||
(True, None, "Device Bla", False),
|
||||
(True, UNDEFINED, "Device Bla English cls", False),
|
||||
(False, "Entity Blu", "Entity Blu"),
|
||||
(False, None, None),
|
||||
(False, UNDEFINED, None),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu"),
|
||||
(True, None, "Device Bla"),
|
||||
(True, UNDEFINED, "Device Bla English cls"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_description_device_class_name(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
entity_name: str | None,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity has an entity description."""
|
||||
|
||||
@ -1139,31 +1121,27 @@ async def test_friendly_name_description_device_class_name(
|
||||
):
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("has_entity_name", "entity_name", "expected_friendly_name", "warn_implicit_name"),
|
||||
("has_entity_name", "entity_name", "expected_friendly_name"),
|
||||
(
|
||||
(False, "Entity Blu", "Entity Blu", False),
|
||||
(False, None, None, False),
|
||||
(False, UNDEFINED, None, False),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu", False),
|
||||
(True, None, "Device Bla", False),
|
||||
(True, UNDEFINED, "Device Bla", True),
|
||||
(False, "Entity Blu", "Entity Blu"),
|
||||
(False, None, None),
|
||||
(False, UNDEFINED, None),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu"),
|
||||
(True, None, "Device Bla"),
|
||||
(True, UNDEFINED, "Device Bla None"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_property(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
entity_name: str | None,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity has overridden the name property."""
|
||||
|
||||
@ -1179,32 +1157,28 @@ async def test_friendly_name_property(
|
||||
)
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("has_entity_name", "entity_name", "expected_friendly_name", "warn_implicit_name"),
|
||||
("has_entity_name", "entity_name", "expected_friendly_name"),
|
||||
(
|
||||
(False, "Entity Blu", "Entity Blu", False),
|
||||
(False, None, None, False),
|
||||
(False, UNDEFINED, None, False),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu", False),
|
||||
(True, None, "Device Bla", False),
|
||||
(False, "Entity Blu", "Entity Blu"),
|
||||
(False, None, None),
|
||||
(False, UNDEFINED, None),
|
||||
(True, "Entity Blu", "Device Bla Entity Blu"),
|
||||
(True, None, "Device Bla"),
|
||||
# Won't use the device class name because the entity overrides the name property
|
||||
(True, UNDEFINED, "Device Bla None", False),
|
||||
(True, UNDEFINED, "Device Bla None"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_property_device_class_name(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
entity_name: str | None,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity has overridden the name property."""
|
||||
|
||||
@ -1244,26 +1218,22 @@ async def test_friendly_name_property_device_class_name(
|
||||
):
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("has_entity_name", "expected_friendly_name", "warn_implicit_name"),
|
||||
("has_entity_name", "expected_friendly_name"),
|
||||
(
|
||||
(False, None, False),
|
||||
(True, "Device Bla English cls", False),
|
||||
(False, None),
|
||||
(True, "Device Bla English cls"),
|
||||
),
|
||||
)
|
||||
async def test_friendly_name_device_class_name(
|
||||
hass: HomeAssistant,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
has_entity_name: bool,
|
||||
expected_friendly_name: str | None,
|
||||
warn_implicit_name: bool,
|
||||
) -> None:
|
||||
"""Test friendly name when the entity has not set the name in any way."""
|
||||
|
||||
@ -1302,10 +1272,8 @@ async def test_friendly_name_device_class_name(
|
||||
):
|
||||
await _test_friendly_name(
|
||||
hass,
|
||||
caplog,
|
||||
ent,
|
||||
expected_friendly_name,
|
||||
warn_implicit_name,
|
||||
)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user