Files
musicseerr/backend/repositories/audiodb_models.py
T
2026-04-03 15:53:00 +01:00

119 lines
4.0 KiB
Python

import time
from typing import Literal
from infrastructure.msgspec_fastapi import AppStruct
class AudioDBArtistResponse(AppStruct):
idArtist: str
strArtist: str
strMusicBrainzID: str | None = None
strArtistThumb: str | None = None
strArtistFanart: str | None = None
strArtistFanart2: str | None = None
strArtistFanart3: str | None = None
strArtistFanart4: str | None = None
strArtistWideThumb: str | None = None
strArtistBanner: str | None = None
strArtistLogo: str | None = None
strArtistCutout: str | None = None
strArtistClearart: str | None = None
class AudioDBAlbumResponse(AppStruct):
idAlbum: str
strAlbum: str
strMusicBrainzID: str | None = None
strAlbumThumb: str | None = None
strAlbumBack: str | None = None
strAlbumCDart: str | None = None
strAlbumSpine: str | None = None
strAlbum3DCase: str | None = None
strAlbum3DFlat: str | None = None
strAlbum3DFace: str | None = None
strAlbum3DThumb: str | None = None
class AudioDBArtistImages(AppStruct):
thumb_url: str | None = None
fanart_url: str | None = None
fanart_url_2: str | None = None
fanart_url_3: str | None = None
fanart_url_4: str | None = None
wide_thumb_url: str | None = None
banner_url: str | None = None
logo_url: str | None = None
cutout_url: str | None = None
clearart_url: str | None = None
lookup_source: Literal["mbid", "name"] = "mbid"
matched_mbid: str | None = None
is_negative: bool = False
cached_at: float = 0.0
@staticmethod
def from_response(resp: AudioDBArtistResponse, lookup_source: Literal["mbid", "name"] = "mbid") -> "AudioDBArtistImages":
return AudioDBArtistImages(
thumb_url=resp.strArtistThumb,
fanart_url=resp.strArtistFanart,
fanart_url_2=resp.strArtistFanart2,
fanart_url_3=resp.strArtistFanart3,
fanart_url_4=resp.strArtistFanart4,
wide_thumb_url=resp.strArtistWideThumb,
banner_url=resp.strArtistBanner,
logo_url=resp.strArtistLogo,
cutout_url=resp.strArtistCutout,
clearart_url=resp.strArtistClearart,
lookup_source=lookup_source,
matched_mbid=resp.strMusicBrainzID,
is_negative=False,
cached_at=time.time(),
)
@classmethod
def negative(cls, lookup_source: Literal["mbid", "name"] = "mbid") -> "AudioDBArtistImages":
return cls(
is_negative=True,
lookup_source=lookup_source,
cached_at=time.time(),
)
class AudioDBAlbumImages(AppStruct):
album_thumb_url: str | None = None
album_back_url: str | None = None
album_cdart_url: str | None = None
album_spine_url: str | None = None
album_3d_case_url: str | None = None
album_3d_flat_url: str | None = None
album_3d_face_url: str | None = None
album_3d_thumb_url: str | None = None
lookup_source: Literal["mbid", "name"] = "mbid"
matched_mbid: str | None = None
is_negative: bool = False
cached_at: float = 0.0
@staticmethod
def from_response(resp: AudioDBAlbumResponse, lookup_source: Literal["mbid", "name"] = "mbid") -> "AudioDBAlbumImages":
return AudioDBAlbumImages(
album_thumb_url=resp.strAlbumThumb,
album_back_url=resp.strAlbumBack,
album_cdart_url=resp.strAlbumCDart,
album_spine_url=resp.strAlbumSpine,
album_3d_case_url=resp.strAlbum3DCase,
album_3d_flat_url=resp.strAlbum3DFlat,
album_3d_face_url=resp.strAlbum3DFace,
album_3d_thumb_url=resp.strAlbum3DThumb,
lookup_source=lookup_source,
matched_mbid=resp.strMusicBrainzID,
is_negative=False,
cached_at=time.time(),
)
@classmethod
def negative(cls, lookup_source: Literal["mbid", "name"] = "mbid") -> "AudioDBAlbumImages":
return cls(
is_negative=True,
lookup_source=lookup_source,
cached_at=time.time(),
)