Use a dict to distinguish property/attribute in media_player (#175193)

This commit is contained in:
epenet
2026-07-01 10:58:34 +02:00
committed by GitHub
parent d4c626c0e0
commit f0da2e8038
3 changed files with 32 additions and 32 deletions
@@ -202,31 +202,31 @@ MEDIA_PLAYER_BROWSE_MEDIA_SCHEMA = {
}
ATTR_TO_PROPERTY = [
MediaPlayerEntityStateAttribute.MEDIA_VOLUME_LEVEL,
MediaPlayerEntityStateAttribute.MEDIA_VOLUME_MUTED,
MediaPlayerEntityStateAttribute.MEDIA_CONTENT_ID,
MediaPlayerEntityStateAttribute.MEDIA_CONTENT_TYPE,
MediaPlayerEntityStateAttribute.MEDIA_DURATION,
MediaPlayerEntityStateAttribute.MEDIA_POSITION,
MediaPlayerEntityStateAttribute.MEDIA_POSITION_UPDATED_AT,
MediaPlayerEntityStateAttribute.MEDIA_TITLE,
MediaPlayerEntityStateAttribute.MEDIA_ARTIST,
MediaPlayerEntityStateAttribute.MEDIA_ALBUM_NAME,
MediaPlayerEntityStateAttribute.MEDIA_ALBUM_ARTIST,
MediaPlayerEntityStateAttribute.MEDIA_TRACK,
MediaPlayerEntityStateAttribute.MEDIA_SERIES_TITLE,
MediaPlayerEntityStateAttribute.MEDIA_SEASON,
MediaPlayerEntityStateAttribute.MEDIA_EPISODE,
MediaPlayerEntityStateAttribute.MEDIA_CHANNEL,
MediaPlayerEntityStateAttribute.MEDIA_PLAYLIST,
MediaPlayerEntityStateAttribute.APP_ID,
MediaPlayerEntityStateAttribute.APP_NAME,
MediaPlayerEntityStateAttribute.INPUT_SOURCE,
MediaPlayerEntityStateAttribute.SOUND_MODE,
MediaPlayerEntityStateAttribute.MEDIA_SHUFFLE,
MediaPlayerEntityStateAttribute.MEDIA_REPEAT,
]
PROP_TO_ATTR = {
"volume_level": MediaPlayerEntityStateAttribute.MEDIA_VOLUME_LEVEL,
"is_volume_muted": MediaPlayerEntityStateAttribute.MEDIA_VOLUME_MUTED,
"media_content_id": MediaPlayerEntityStateAttribute.MEDIA_CONTENT_ID,
"media_content_type": MediaPlayerEntityStateAttribute.MEDIA_CONTENT_TYPE,
"media_duration": MediaPlayerEntityStateAttribute.MEDIA_DURATION,
"media_position": MediaPlayerEntityStateAttribute.MEDIA_POSITION,
"media_position_updated_at": MediaPlayerEntityStateAttribute.MEDIA_POSITION_UPDATED_AT,
"media_title": MediaPlayerEntityStateAttribute.MEDIA_TITLE,
"media_artist": MediaPlayerEntityStateAttribute.MEDIA_ARTIST,
"media_album_name": MediaPlayerEntityStateAttribute.MEDIA_ALBUM_NAME,
"media_album_artist": MediaPlayerEntityStateAttribute.MEDIA_ALBUM_ARTIST,
"media_track": MediaPlayerEntityStateAttribute.MEDIA_TRACK,
"media_series_title": MediaPlayerEntityStateAttribute.MEDIA_SERIES_TITLE,
"media_season": MediaPlayerEntityStateAttribute.MEDIA_SEASON,
"media_episode": MediaPlayerEntityStateAttribute.MEDIA_EPISODE,
"media_channel": MediaPlayerEntityStateAttribute.MEDIA_CHANNEL,
"media_playlist": MediaPlayerEntityStateAttribute.MEDIA_PLAYLIST,
"app_id": MediaPlayerEntityStateAttribute.APP_ID,
"app_name": MediaPlayerEntityStateAttribute.APP_NAME,
"source": MediaPlayerEntityStateAttribute.INPUT_SOURCE,
"sound_mode": MediaPlayerEntityStateAttribute.SOUND_MODE,
"shuffle": MediaPlayerEntityStateAttribute.MEDIA_SHUFFLE,
"repeat": MediaPlayerEntityStateAttribute.MEDIA_REPEAT,
}
# mypy: disallow-any-generics
@@ -1141,8 +1141,8 @@ class MediaPlayerEntity(Entity, cached_properties=CACHED_PROPERTIES_WITH_ATTR_):
if self.state == MediaPlayerState.OFF:
return state_attr
for attr in ATTR_TO_PROPERTY:
if (value := getattr(self, attr)) is not None:
for prop, attr in PROP_TO_ATTR.items():
if (value := getattr(self, prop)) is not None:
state_attr[attr] = value
if self.media_image_remotely_accessible:
@@ -13,7 +13,7 @@ from . import (
ATTR_MEDIA_POSITION,
ATTR_MEDIA_POSITION_UPDATED_AT,
ATTR_MEDIA_VOLUME_LEVEL,
ATTR_TO_PROPERTY,
PROP_TO_ATTR,
)
INSIGNIFICANT_ATTRIBUTES: set[str] = {
@@ -23,7 +23,7 @@ INSIGNIFICANT_ATTRIBUTES: set[str] = {
SIGNIFICANT_ATTRIBUTES: set[str] = {
ATTR_ENTITY_PICTURE_LOCAL,
*ATTR_TO_PROPERTY,
*PROP_TO_ATTR.values(),
} - INSIGNIFICANT_ATTRIBUTES
@@ -1318,7 +1318,7 @@ async def test_unavailable_device(
# Check attributes are unavailable
attrs = mock_state.attributes
for attr in mp.ATTR_TO_PROPERTY:
for attr in mp.PROP_TO_ATTR.values():
assert attr not in attrs
assert attrs[ha_const.ATTR_FRIENDLY_NAME] == MOCK_DEVICE_NAME
@@ -2081,8 +2081,8 @@ async def test_disappearing_device(
entity: DlnaDmrEntity = hass.data[mp.DOMAIN].get_entity(mock_disconnected_entity_id)
# Test attribute access
for attr in mp.ATTR_TO_PROPERTY:
value = getattr(entity, attr)
for prop in mp.PROP_TO_ATTR:
value = getattr(entity, prop)
assert value is None
# media_image_url is normally hidden by entity_picture, but we want a direct check