Apple Music: (Hopefully) fix time out issues + fix handling of missing artist details...
authorMarvin Schenkel <marvinschenkel@gmail.com>
Thu, 11 Jul 2024 18:38:49 +0000 (20:38 +0200)
committerGitHub <noreply@github.com>
Thu, 11 Jul 2024 18:38:49 +0000 (20:38 +0200)
* Fix timeout issues and added itemmapping in case an Artist cannot be found

* Remove debug statement for solved issue.

music_assistant/server/providers/apple_music/__init__.py

index 481ae9b6a3c66939381ba2ba2af8b4ed16ee2ee3..46d2748146541286ef1b43afee46e44723d0797c 100644 (file)
@@ -209,8 +209,8 @@ class AppleMusicProvider(MusicProvider):
                 )
                 continue
             song_catalog_ids.append(catalog_id)
-        # Obtain catalog info per 300 songs
-        max_limit = 300
+        # Obtain catalog info per 200 songs, the documented limit of 300 results in a 504 timeout
+        max_limit = 200
         for i in range(0, len(song_catalog_ids), max_limit):
             catalog_ids = song_catalog_ids[i : i + max_limit]
             catalog_endpoint = f"catalog/{self._storefront}/songs"
@@ -238,8 +238,6 @@ class AppleMusicProvider(MusicProvider):
 
     async def get_album(self, prov_album_id) -> Album:
         """Get full album details by id."""
-        # Debug issue https://github.com/music-assistant/hass-music-assistant/issues/2431
-        self.logger.debug("Get album %s", prov_album_id)
         endpoint = f"catalog/{self._storefront}/albums/{prov_album_id}"
         response = await self._get_data(endpoint, include="artists")
         return self._parse_album(response["data"][0])
@@ -384,7 +382,14 @@ class AppleMusicProvider(MusicProvider):
             attributes = artist_obj["attributes"]
         else:
             artist_id = artist_obj["id"]
-            attributes = {}
+            self.logger.debug("No attributes found for artist %s", artist_obj)
+            # No more details available other than the id, return an ItemMapping
+            return ItemMapping(
+                media_type=MediaType.ARTIST,
+                provider=self.instance_id,
+                item_id=artist_id,
+                name=artist_id,
+            )
         artist = Artist(
             item_id=artist_id,
             name=attributes.get("name"),