Bump spotifyaio to 0.7.1 (#128807)

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

View File

@ -5,6 +5,7 @@ from datetime import datetime, timedelta
import logging
from spotifyaio import (
ContextType,
PlaybackState,
Playlist,
SpotifyClient,
@ -12,7 +13,6 @@ from spotifyaio import (
UserProfile,
)
from homeassistant.components.media_player import MediaType
from homeassistant.core import HomeAssistant
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
import homeassistant.util.dt as dt_util
@ -77,7 +77,7 @@ class SpotifyCoordinator(DataUpdateCoordinator[SpotifyCoordinatorData]):
self._playlist = None
if context.uri == SPOTIFY_DJ_PLAYLIST_URI:
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
# playback state update
try:

View File

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

View File

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

View File

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

View File

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

View File

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