diff --git a/tests/test_parsing.py b/tests/test_parsing.py index 35a4ff3..e1df814 100644 --- a/tests/test_parsing.py +++ b/tests/test_parsing.py @@ -198,3 +198,35 @@ def test_track_with_album_parses_album_artist(session): assert track.album.artist is None assert track.artist is None + + +def test_available_track_with_null_media_metadata(session): + track = session.track().parse_track( + track_json(allowStreaming=True, streamReady=True, mediaMetadata=None) + ) + + assert track.media_metadata_tags == {} + + +def test_track_media_metadata_tags_are_read(session): + track = session.track().parse_track( + track_json( + allowStreaming=True, + streamReady=True, + mediaMetadata={"tags": ["LOSSLESS", "HIRES_LOSSLESS"]}, + ) + ) + + assert track.media_metadata_tags == ["LOSSLESS", "HIRES_LOSSLESS"] + + +def test_album_with_null_media_metadata_keeps_default_tags(session): + album = session.album().parse(album_json(mediaMetadata=None)) + + assert album.media_metadata_tags == [""] + + +def test_album_media_metadata_tags_are_read(session): + album = session.album().parse(album_json(mediaMetadata={"tags": ["LOSSLESS"]})) + + assert album.media_metadata_tags == ["LOSSLESS"] diff --git a/tidalapi/album.py b/tidalapi/album.py index c1eb8d3..95db962 100644 --- a/tidalapi/album.py +++ b/tidalapi/album.py @@ -139,8 +139,10 @@ def parse( self.audio_quality = json_obj.get("audioQuality") self.audio_modes = json_obj.get("audioModes") - if "mediaMetadata" in json_obj: - self.media_metadata_tags = json_obj.get("mediaMetadata")["tags"] + # mediaMetadata can be null + media_metadata = json_obj.get("mediaMetadata") or {} + if "tags" in media_metadata: + self.media_metadata_tags = media_metadata["tags"] self.artist = artist self.artists = artists diff --git a/tidalapi/media.py b/tidalapi/media.py index 2ff35e9..55b6b39 100644 --- a/tidalapi/media.py +++ b/tidalapi/media.py @@ -361,7 +361,9 @@ def parse_track(self, json_obj: JsonObj, album: Album | None = None) -> Track: if self.available: self.access_type = json_obj.get("accessType", "None") - self.media_metadata_tags = json_obj.get("mediaMetadata", {}).get("tags", {}) + # mediaMetadata can be null + media_metadata = json_obj.get("mediaMetadata") or {} + self.media_metadata_tags = media_metadata.get("tags", {}) self.index = json_obj.get("index") self.item_uuid = json_obj.get("itemUuid")