Bump spotifyaio to 0.7.1 (#128807)

This commit is contained in:
Joost Lekkerkerker 2024-10-20 09:49:23 +02:00 committed by GitHub
parent 28ff138370
commit 8ceecec5b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 49 additions and 47 deletions

View File

@ -253,7 +253,6 @@ async def async_browse_media(
result = await async_browse_media_internal( result = await async_browse_media_internal(
hass, hass,
info.coordinator.client, info.coordinator.client,
info.coordinator.current_user,
media_content_type, media_content_type,
media_content_id, media_content_id,
can_play_artist=can_play_artist, can_play_artist=can_play_artist,
@ -270,7 +269,6 @@ async def async_browse_media(
async def async_browse_media_internal( async def async_browse_media_internal(
hass: HomeAssistant, hass: HomeAssistant,
spotify: SpotifyClient, spotify: SpotifyClient,
current_user: dict[str, Any],
media_content_type: str | None, media_content_type: str | None,
media_content_id: str | None, media_content_id: str | None,
*, *,
@ -290,7 +288,6 @@ async def async_browse_media_internal(
} }
response = await build_item_response( response = await build_item_response(
spotify, spotify,
current_user,
payload, payload,
can_play_artist=can_play_artist, can_play_artist=can_play_artist,
) )
@ -301,7 +298,6 @@ async def async_browse_media_internal(
async def build_item_response( # noqa: C901 async def build_item_response( # noqa: C901
spotify: SpotifyClient, spotify: SpotifyClient,
user: dict[str, Any],
payload: dict[str, str | None], payload: dict[str, str | None],
*, *,
can_play_artist: bool, can_play_artist: bool,
@ -330,12 +326,13 @@ async def build_item_response( # noqa: C901
for saved_album in saved_albums for saved_album in saved_albums
] ]
elif media_content_type == BrowsableMedia.CURRENT_USER_SAVED_TRACKS: elif media_content_type == BrowsableMedia.CURRENT_USER_SAVED_TRACKS:
if media := await spotify.get_saved_tracks(): if saved_tracks := await spotify.get_saved_tracks():
items = [ items = [
_get_track_item_payload(saved_track.track) for saved_track in media _get_track_item_payload(saved_track.track)
for saved_track in saved_tracks
] ]
elif media_content_type == BrowsableMedia.CURRENT_USER_SAVED_SHOWS: elif media_content_type == BrowsableMedia.CURRENT_USER_SAVED_SHOWS:
if media := await spotify.get_saved_shows(): if saved_shows := await spotify.get_saved_shows():
items = [ items = [
{ {
"id": saved_show.show.show_id, "id": saved_show.show.show_id,
@ -344,22 +341,26 @@ async def build_item_response( # noqa: C901
"uri": saved_show.show.uri, "uri": saved_show.show.uri,
"thumbnail": fetch_image_url(saved_show.show.images), "thumbnail": fetch_image_url(saved_show.show.images),
} }
for saved_show in media for saved_show in saved_shows
] ]
elif media_content_type == BrowsableMedia.CURRENT_USER_RECENTLY_PLAYED: elif media_content_type == BrowsableMedia.CURRENT_USER_RECENTLY_PLAYED:
if media := await spotify.get_recently_played_tracks(): if recently_played_tracks := await spotify.get_recently_played_tracks():
items = [_get_track_item_payload(item.track) for item in media] items = [
_get_track_item_payload(item.track) for item in recently_played_tracks
]
elif media_content_type == BrowsableMedia.CURRENT_USER_TOP_ARTISTS: elif media_content_type == BrowsableMedia.CURRENT_USER_TOP_ARTISTS:
if media := await spotify.get_top_artists(): if top_artists := await spotify.get_top_artists():
items = [_get_artist_item_payload(artist) for artist in media] items = [_get_artist_item_payload(artist) for artist in top_artists]
elif media_content_type == BrowsableMedia.CURRENT_USER_TOP_TRACKS: elif media_content_type == BrowsableMedia.CURRENT_USER_TOP_TRACKS:
if media := await spotify.get_top_tracks(): if top_tracks := await spotify.get_top_tracks():
items = [_get_track_item_payload(track) for track in media] items = [_get_track_item_payload(track) for track in top_tracks]
elif media_content_type == BrowsableMedia.FEATURED_PLAYLISTS: elif media_content_type == BrowsableMedia.FEATURED_PLAYLISTS:
if media := await spotify.get_featured_playlists(): if featured_playlists := await spotify.get_featured_playlists():
items = [_get_playlist_item_payload(playlist) for playlist in media] items = [
_get_playlist_item_payload(playlist) for playlist in featured_playlists
]
elif media_content_type == BrowsableMedia.CATEGORIES: elif media_content_type == BrowsableMedia.CATEGORIES:
if media := await spotify.get_categories(): if categories := await spotify.get_categories():
items = [ items = [
{ {
"id": category.category_id, "id": category.category_id,
@ -368,43 +369,45 @@ async def build_item_response( # noqa: C901
"uri": category.category_id, "uri": category.category_id,
"thumbnail": category.icons[0].url if category.icons else None, "thumbnail": category.icons[0].url if category.icons else None,
} }
for category in media for category in categories
] ]
elif media_content_type == "category_playlists": elif media_content_type == "category_playlists":
if ( if (
media := await spotify.get_category_playlists(category_id=media_content_id) playlists := await spotify.get_category_playlists(
category_id=media_content_id
)
) and (category := await spotify.get_category(media_content_id)): ) and (category := await spotify.get_category(media_content_id)):
title = category.name title = category.name
image = category.icons[0].url if category.icons else None image = category.icons[0].url if category.icons else None
items = [_get_playlist_item_payload(playlist) for playlist in media] items = [_get_playlist_item_payload(playlist) for playlist in playlists]
elif media_content_type == BrowsableMedia.NEW_RELEASES: elif media_content_type == BrowsableMedia.NEW_RELEASES:
if media := await spotify.get_new_releases(): if new_releases := await spotify.get_new_releases():
items = [_get_album_item_payload(album) for album in media] items = [_get_album_item_payload(album) for album in new_releases]
elif media_content_type == MediaType.PLAYLIST: elif media_content_type == MediaType.PLAYLIST:
if media := await spotify.get_playlist(media_content_id): if playlist := await spotify.get_playlist(media_content_id):
title = media.name title = playlist.name
image = media.images[0].url if media.images else None image = playlist.images[0].url if playlist.images else None
items = [ items = [
_get_track_item_payload(playlist_track.track) _get_track_item_payload(playlist_track.track)
for playlist_track in media.tracks.items for playlist_track in playlist.tracks.items
] ]
elif media_content_type == MediaType.ALBUM: elif media_content_type == MediaType.ALBUM:
if media := await spotify.get_album(media_content_id): if album := await spotify.get_album(media_content_id):
title = media.name title = album.name
image = media.images[0].url if media.images else None image = album.images[0].url if album.images else None
items = [ items = [
_get_track_item_payload(track, show_thumbnails=False) _get_track_item_payload(track, show_thumbnails=False)
for track in media.tracks for track in album.tracks
] ]
elif media_content_type == MediaType.ARTIST: elif media_content_type == MediaType.ARTIST:
if (media := await spotify.get_artist_albums(media_content_id)) and ( if (artist_albums := await spotify.get_artist_albums(media_content_id)) and (
artist := await spotify.get_artist(media_content_id) artist := await spotify.get_artist(media_content_id)
): ):
title = artist.name title = artist.name
image = artist.images[0].url if artist.images else None image = artist.images[0].url if artist.images else None
items = [_get_album_item_payload(album) for album in media] items = [_get_album_item_payload(album) for album in artist_albums]
elif media_content_type == MEDIA_TYPE_SHOW: elif media_content_type == MEDIA_TYPE_SHOW:
if (media := await spotify.get_show_episodes(media_content_id)) and ( if (show_episodes := await spotify.get_show_episodes(media_content_id)) and (
show := await spotify.get_show(media_content_id) show := await spotify.get_show(media_content_id)
): ):
title = show.name title = show.name
@ -417,7 +420,7 @@ async def build_item_response( # noqa: C901
"uri": episode.uri, "uri": episode.uri,
"thumbnail": fetch_image_url(episode.images), "thumbnail": fetch_image_url(episode.images),
} }
for episode in media for episode in show_episodes
] ]
try: try:

View File

@ -5,6 +5,7 @@ from datetime import datetime, timedelta
import logging import logging
from spotifyaio import ( from spotifyaio import (
ContextType,
PlaybackState, PlaybackState,
Playlist, Playlist,
SpotifyClient, SpotifyClient,
@ -12,7 +13,6 @@ from spotifyaio import (
UserProfile, UserProfile,
) )
from homeassistant.components.media_player import MediaType
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
@ -77,7 +77,7 @@ class SpotifyCoordinator(DataUpdateCoordinator[SpotifyCoordinatorData]):
self._playlist = None self._playlist = None
if context.uri == SPOTIFY_DJ_PLAYLIST_URI: if context.uri == SPOTIFY_DJ_PLAYLIST_URI:
dj_playlist = True dj_playlist = True
elif context.context_type == MediaType.PLAYLIST: elif context.context_type == ContextType.PLAYLIST:
# Make sure any playlist lookups don't break the current # Make sure any playlist lookups don't break the current
# playback state update # playback state update
try: try:

View File

@ -9,6 +9,6 @@
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["spotipy"], "loggers": ["spotipy"],
"quality_scale": "silver", "quality_scale": "silver",
"requirements": ["spotifyaio==0.7.0"], "requirements": ["spotifyaio==0.7.1"],
"zeroconf": ["_spotify-connect._tcp.local."] "zeroconf": ["_spotify-connect._tcp.local."]
} }

View File

@ -169,20 +169,20 @@ class SpotifyMediaPlayer(CoordinatorEntity[SpotifyCoordinator], MediaPlayerEntit
@ensure_item @ensure_item
def media_content_type(self, item: Item) -> str: # noqa: PLR0206 def media_content_type(self, item: Item) -> str: # noqa: PLR0206
"""Return the media type.""" """Return the media type."""
return MediaType.PODCAST if item.type == MediaType.EPISODE else MediaType.MUSIC return MediaType.PODCAST if item.type == ItemType.EPISODE else MediaType.MUSIC
@property @property
@ensure_item @ensure_item
def media_duration(self, item: Item) -> int: # noqa: PLR0206 def media_duration(self, item: Item) -> int: # noqa: PLR0206
"""Duration of current playing media in seconds.""" """Duration of current playing media in seconds."""
return item.duration_ms / 1000 return round(item.duration_ms / 1000)
@property @property
def media_position(self) -> int | None: def media_position(self) -> int | None:
"""Position of current playing media in seconds.""" """Position of current playing media in seconds."""
if not self.currently_playing or self.currently_playing.progress_ms is None: if not self.currently_playing or self.currently_playing.progress_ms is None:
return None return None
return self.currently_playing.progress_ms / 1000 return round(self.currently_playing.progress_ms / 1000)
@property @property
def media_position_updated_at(self) -> dt.datetime | None: def media_position_updated_at(self) -> dt.datetime | None:
@ -380,7 +380,6 @@ class SpotifyMediaPlayer(CoordinatorEntity[SpotifyCoordinator], MediaPlayerEntit
return await async_browse_media_internal( return await async_browse_media_internal(
self.hass, self.hass,
self.coordinator.client, self.coordinator.client,
self.coordinator.current_user,
media_content_type, media_content_type,
media_content_id, media_content_id,
) )

View File

@ -2700,7 +2700,7 @@ speak2mary==1.4.0
speedtest-cli==2.1.3 speedtest-cli==2.1.3
# homeassistant.components.spotify # homeassistant.components.spotify
spotifyaio==0.7.0 spotifyaio==0.7.1
# homeassistant.components.sql # homeassistant.components.sql
sqlparse==0.5.0 sqlparse==0.5.0

View File

@ -2146,7 +2146,7 @@ speak2mary==1.4.0
speedtest-cli==2.1.3 speedtest-cli==2.1.3
# homeassistant.components.spotify # homeassistant.components.spotify
spotifyaio==0.7.0 spotifyaio==0.7.1
# homeassistant.components.sql # homeassistant.components.sql
sqlparse==0.5.0 sqlparse==0.5.0

View File

@ -45,9 +45,9 @@
'media_artist': 'Rush', 'media_artist': 'Rush',
'media_content_id': 'spotify:track:4e9hUiLsN4mx61ARosFi7p', 'media_content_id': 'spotify:track:4e9hUiLsN4mx61ARosFi7p',
'media_content_type': <MediaType.MUSIC: 'music'>, 'media_content_type': <MediaType.MUSIC: 'music'>,
'media_duration': 296.466, 'media_duration': 296,
'media_playlist': 'Spotify Web API Testing playlist', 'media_playlist': 'Spotify Web API Testing playlist',
'media_position': 249.367, 'media_position': 249,
'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc), 'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc),
'media_title': 'The Spirit Of Radio', 'media_title': 'The Spirit Of Radio',
'media_track': 1, 'media_track': 1,
@ -114,8 +114,8 @@
'media_artist': 'Safety Third ', 'media_artist': 'Safety Third ',
'media_content_id': 'spotify:episode:3o0RYoo5iOMKSmEbunsbvW', 'media_content_id': 'spotify:episode:3o0RYoo5iOMKSmEbunsbvW',
'media_content_type': <MediaType.PODCAST: 'podcast'>, 'media_content_type': <MediaType.PODCAST: 'podcast'>,
'media_duration': 3690.161, 'media_duration': 3690,
'media_position': 5.41, 'media_position': 5,
'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc), 'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc),
'media_title': 'My Squirrel Has Brain Damage - Safety Third 119', 'media_title': 'My Squirrel Has Brain Damage - Safety Third 119',
'repeat': <RepeatMode.OFF: 'off'>, 'repeat': <RepeatMode.OFF: 'off'>,