119 lines
4.0 KiB
Python
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(),
|
|
)
|