Map ItemMapping results from database records
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 25 Mar 2023 00:45:33 +0000 (01:45 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 25 Mar 2023 00:45:33 +0000 (01:45 +0100)
music_assistant/common/models/media_items.py
music_assistant/server/controllers/media/albums.py
music_assistant/server/controllers/media/tracks.py

index 8d385c04db304b38137d0088a9f94b2687e3791f..5e74763beb56f3cd1a066063134e27aaa4c15313 100755 (executable)
@@ -319,6 +319,13 @@ class Album(MediaItem):
         return hash((self.provider, self.item_id))
 
 
+@dataclass
+class DbAlbum(Album):
+    """Model for an album when retrieved from the db."""
+
+    artists: list[ItemMapping] = field(default_factory=list)
+
+
 @dataclass(frozen=True)
 class TrackAlbumMapping(ItemMapping):
     """Model for a track that is mapped to an album."""
@@ -382,6 +389,16 @@ class Track(MediaItem):
         return self.metadata and self.metadata.chapters and len(self.metadata.chapters) > 1
 
 
+@dataclass
+class DbTrack(Track):
+    """Model for a track when retrieved from the db."""
+
+    artists: list[ItemMapping] = field(default_factory=list)
+    # album track only
+    album: ItemMapping | None = None
+    albums: list[TrackAlbumMapping] = field(default_factory=list)
+
+
 @dataclass
 class Playlist(MediaItem):
     """Model for a playlist."""
index c05118638a6e812228897165905e39f1a7881258..b957ca525370c24fdaca6442fa6838b67882af48 100644 (file)
@@ -14,6 +14,7 @@ from music_assistant.common.models.media_items import (
     Album,
     AlbumType,
     Artist,
+    DbAlbum,
     ItemMapping,
     MediaType,
     Track,
@@ -31,7 +32,7 @@ class AlbumsController(MediaControllerBase[Album]):
 
     db_table = DB_TABLE_ALBUMS
     media_type = MediaType.ALBUM
-    item_cls = Album
+    item_cls = DbAlbum
 
     def __init__(self, *args, **kwargs):
         """Initialize class."""
index 2e06cdf6855960568a268e48b63ba3871a306286..b797b7302a5fd752d2838230e6520cf26178c991 100644 (file)
@@ -10,6 +10,7 @@ from music_assistant.common.models.errors import MediaNotFoundError, Unsupported
 from music_assistant.common.models.media_items import (
     Album,
     Artist,
+    DbTrack,
     ItemMapping,
     Track,
     TrackAlbumMapping,
@@ -29,7 +30,7 @@ class TracksController(MediaControllerBase[Track]):
 
     db_table = DB_TABLE_TRACKS
     media_type = MediaType.TRACK
-    item_cls = Track
+    item_cls = DbTrack
 
     def __init__(self, *args, **kwargs):
         """Initialize class."""