add serializer functions for track and album objects

This commit is contained in:
mungai-njoroge
2023-06-24 16:47:54 +03:00
parent 88be80b25d
commit dbfa395207
7 changed files with 169 additions and 43 deletions
+28
View File
@@ -0,0 +1,28 @@
from dataclasses import asdict
from app.models.album import Album
def album_serializer(album: Album, to_remove: set[str]) -> dict:
album_dict = asdict(album)
to_remove.update(key for key in album_dict.keys() if key.startswith("is_"))
for key in to_remove:
album_dict.pop(key, None)
return album_dict
def serialize_for_card(album: Album):
props_to_remove = {
"duration",
"count",
"albumartist_hashes",
"og_title",
"base_title",
}
return album_serializer(album, props_to_remove)
def serialize_for_card_many(albums: list[Album]):
return [serialize_for_card(a) for a in albums]
+25
View File
@@ -0,0 +1,25 @@
# from dataclasses import asdict
# def album_serializer(album: Artist, to_remove: set[str]) -> ArtistMinimal:
# album_dict = asdict(album)
# to_remove.update(key for key in album_dict.keys() if key.startswith("is_"))
# for key in to_remove:
# album_dict.pop(key, None)
# return album_dict
# Traceback (most recent call last):
# File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
# self.run()
# File "/usr/lib/python3.10/threading.py", line 953, in run
# self._target(*self._args, **self._kwargs)
# File "/usr/lib/python3.10/multiprocessing/pool.py", line 579, in _handle_results
# task = get()
# File "/usr/lib/python3.10/multiprocessing/connection.py", line 251, in recv
# return _ForkingPickler.loads(buf.getbuffer())
# File "/home/cwilvx/.cache/pypoetry/virtualenvs/swing_music_player-xIXBgWdk-py3.10/lib/python3.10/site-packages/requests/exceptions.py", line 41, in __init__
# CompatJSONDecodeError.__init__(self, *args)
# TypeError: JSONDecodeError.__init__() missing 2 required positional arguments: 'doc' and 'pos'
+28
View File
@@ -0,0 +1,28 @@
from dataclasses import asdict
from app.models.track import Track
def track_serializer(track: Track, _remove: set = {}, retain_disc=False) -> dict:
album_dict = asdict(track)
to_remove = {
"date",
"genre",
"last_mod",
"og_title",
"og_album",
}.union(_remove)
if not retain_disc:
to_remove.union("disc", "track")
to_remove.update(key for key in album_dict.keys() if key.startswith("is_"))
for key in to_remove:
album_dict.pop(key, None)
return album_dict
def serialize_tracks(
tracks: list[Track], _remove: set = {}, retain_disc=False
) -> list[dict]:
return [track_serializer(t, _remove, retain_disc) for t in tracks]