Add lib
This commit is contained in:
100
lib/ShazamIO/shazamio/schemas/artists.py
Normal file
100
lib/ShazamIO/shazamio/schemas/artists.py
Normal file
@@ -0,0 +1,100 @@
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import field
|
||||
from typing import List
|
||||
from typing import Optional
|
||||
from typing import Union
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic import Field
|
||||
|
||||
from shazamio.schemas.artist.views.full_albums import FullAlbumsModel
|
||||
from shazamio.schemas.artist.views.last_release import LastReleaseModel
|
||||
from shazamio.schemas.artist.views.simular_artists import SimularArtist
|
||||
from shazamio.schemas.artist.views.top_music import TopMusicVideosView
|
||||
from shazamio.schemas.artist.views.top_song import TopSong
|
||||
from shazamio.schemas.attributes import ArtistAttribute
|
||||
from shazamio.schemas.enums import ArtistExtend
|
||||
from shazamio.schemas.enums import ArtistView
|
||||
from shazamio.schemas.errors import ErrorModel
|
||||
|
||||
|
||||
@dataclass
|
||||
class ArtistInfo:
|
||||
name: str
|
||||
verified: Optional[bool]
|
||||
genres: Optional[List[str]] = field(default_factory=list)
|
||||
alias: Optional[str] = None
|
||||
genres_primary: Optional[str] = None
|
||||
avatar: Optional[Union[dict, str]] = None
|
||||
adam_id: Optional[int] = None
|
||||
url: Optional[str] = ""
|
||||
|
||||
def __post_init__(self):
|
||||
self.avatar = self.__optional_avatar()
|
||||
|
||||
def __optional_avatar(self) -> Optional[str]:
|
||||
if self.avatar is None:
|
||||
return None
|
||||
elif "default" in self.avatar:
|
||||
return self.avatar.get("default")
|
||||
else:
|
||||
return "".join(self.avatar)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ArtistV2:
|
||||
artist: ArtistInfo
|
||||
|
||||
|
||||
@dataclass
|
||||
class ArtistQuery:
|
||||
views: List[ArtistView] = field(default_factory=list)
|
||||
extend: List[ArtistExtend] = field(default_factory=list)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ArtistAvatar:
|
||||
width: int
|
||||
height: int
|
||||
url: str
|
||||
|
||||
@classmethod
|
||||
def url_with_size(cls, height: int, width: int) -> str:
|
||||
return cls.url.format(w=width, h=height)
|
||||
|
||||
|
||||
class AlbumRelationshipElement(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
href: str
|
||||
|
||||
|
||||
class AlbumRelationship(BaseModel):
|
||||
href: str
|
||||
next: Optional[str] = None
|
||||
data: List[AlbumRelationshipElement]
|
||||
|
||||
|
||||
class ArtistRelationships(BaseModel):
|
||||
albums: AlbumRelationship
|
||||
|
||||
|
||||
class ArtistViews(BaseModel):
|
||||
top_music_videos: Optional[TopMusicVideosView] = Field(None, alias="top-music-videos")
|
||||
simular_artists: Optional[SimularArtist] = Field(None, alias="similar-artists")
|
||||
latest_release: Optional[LastReleaseModel] = Field(None, alias="latest-release")
|
||||
full_albums: Optional[FullAlbumsModel] = Field(None, alias="full-albums")
|
||||
top_songs: Optional[TopSong] = Field(None, alias="top-songs")
|
||||
|
||||
|
||||
class ArtistV3(BaseModel):
|
||||
id: str
|
||||
type: str
|
||||
attributes: ArtistAttribute
|
||||
relationships: ArtistRelationships
|
||||
views: ArtistViews
|
||||
|
||||
|
||||
class ArtistResponse(BaseModel):
|
||||
errors: List[ErrorModel] = []
|
||||
data: List[ArtistV3] = []
|
||||
Reference in New Issue
Block a user