mirror of
https://github.com/home-assistant/core.git
synced 2026-08-24 10:13:52 -05:00
Use a dict to distinguish property/attribute in media_player (#175193)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user