Add Entity.has_entity_name attribute (#73217)
This commit is contained in:
parent
c883aec711
commit
26a85c6644
9 changed files with 186 additions and 18 deletions
|
@ -38,7 +38,7 @@ from homeassistant.exceptions import HomeAssistantError, NoEntitySpecifiedError
|
|||
from homeassistant.loader import bind_hass
|
||||
from homeassistant.util import dt as dt_util, ensure_unique_string, slugify
|
||||
|
||||
from . import entity_registry as er
|
||||
from . import device_registry as dr, entity_registry as er
|
||||
from .device_registry import DeviceEntryType
|
||||
from .entity_platform import EntityPlatform
|
||||
from .event import async_track_entity_registry_updated_event
|
||||
|
@ -221,6 +221,7 @@ class EntityDescription:
|
|||
entity_registry_visible_default: bool = True
|
||||
force_update: bool = False
|
||||
icon: str | None = None
|
||||
has_entity_name: bool = False
|
||||
name: str | None = None
|
||||
unit_of_measurement: str | None = None
|
||||
|
||||
|
@ -277,6 +278,7 @@ class Entity(ABC):
|
|||
_attr_device_class: str | None
|
||||
_attr_device_info: DeviceInfo | None = None
|
||||
_attr_entity_category: EntityCategory | None
|
||||
_attr_has_entity_name: bool
|
||||
_attr_entity_picture: str | None = None
|
||||
_attr_entity_registry_enabled_default: bool
|
||||
_attr_entity_registry_visible_default: bool
|
||||
|
@ -303,6 +305,15 @@ class Entity(ABC):
|
|||
"""Return a unique ID."""
|
||||
return self._attr_unique_id
|
||||
|
||||
@property
|
||||
def has_entity_name(self) -> bool:
|
||||
"""Return if the name of the entity is describing only the entity itself."""
|
||||
if hasattr(self, "_attr_has_entity_name"):
|
||||
return self._attr_has_entity_name
|
||||
if hasattr(self, "entity_description"):
|
||||
return self.entity_description.has_entity_name
|
||||
return False
|
||||
|
||||
@property
|
||||
def name(self) -> str | None:
|
||||
"""Return the name of the entity."""
|
||||
|
@ -583,7 +594,26 @@ class Entity(ABC):
|
|||
if (icon := (entry and entry.icon) or self.icon) is not None:
|
||||
attr[ATTR_ICON] = icon
|
||||
|
||||
if (name := (entry and entry.name) or self.name) is not None:
|
||||
def friendly_name() -> str | None:
|
||||
"""Return the friendly name.
|
||||
|
||||
If has_entity_name is False, this returns self.name
|
||||
If has_entity_name is True, this returns device.name + self.name
|
||||
"""
|
||||
if not self.has_entity_name or not self.registry_entry:
|
||||
return self.name
|
||||
|
||||
device_registry = dr.async_get(self.hass)
|
||||
if not (device_id := self.registry_entry.device_id) or not (
|
||||
device_entry := device_registry.async_get(device_id)
|
||||
):
|
||||
return self.name
|
||||
|
||||
if not self.name:
|
||||
return device_entry.name_by_user or device_entry.name
|
||||
return f"{device_entry.name_by_user or device_entry.name} {self.name}"
|
||||
|
||||
if (name := (entry and entry.name) or friendly_name()) is not None:
|
||||
attr[ATTR_FRIENDLY_NAME] = name
|
||||
|
||||
if (supported_features := self.supported_features) is not None:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue