Files
deezspot-spotizerr-dev/deezspot/models/librespot/artist.py

63 lines
2.0 KiB
Python

#!/usr/bin/python3
from dataclasses import dataclass, field
from typing import Optional, Dict, Any, List
from .types import ExternalUrls, Image, _str, _int
@dataclass
class Artist:
id: Optional[str] = None
name: Optional[str] = None
uri: Optional[str] = None
type: str = "artist"
genres: List[str] = field(default_factory=list)
images: Optional[List[Image]] = None
popularity: Optional[int] = None
external_urls: ExternalUrls = field(default_factory=ExternalUrls)
album_group: List[str] = field(default_factory=list)
single_group: List[str] = field(default_factory=list)
compilation_group: List[str] = field(default_factory=list)
appears_on_group: List[str] = field(default_factory=list)
@staticmethod
def from_dict(obj: Any) -> "Artist":
if not isinstance(obj, dict):
return Artist()
imgs: List[Image] = []
for im in obj.get("images", []) or []:
im_obj = Image.from_dict(im)
if im_obj:
imgs.append(im_obj)
return Artist(
id=_str(obj.get("id")),
name=_str(obj.get("name")),
uri=_str(obj.get("uri")),
type=_str(obj.get("type")) or "artist",
genres=list(obj.get("genres", []) or []),
images=imgs or None,
popularity=_int(obj.get("popularity")),
external_urls=ExternalUrls.from_dict(obj.get("external_urls", {})),
album_group=list(obj.get("album_group", []) or []),
single_group=list(obj.get("single_group", []) or []),
compilation_group=list(obj.get("compilation_group", []) or []),
appears_on_group=list(obj.get("appears_on_group", []) or []),
)
def to_dict(self) -> Dict[str, Any]:
out = {
"id": self.id,
"name": self.name,
"uri": self.uri,
"type": self.type,
"genres": self.genres or [],
"images": [im.to_dict() for im in (self.images or [])],
"popularity": self.popularity,
"external_urls": self.external_urls.to_dict(),
"album_group": self.album_group or [],
"single_group": self.single_group or [],
"compilation_group": self.compilation_group or [],
"appears_on_group": self.appears_on_group or [],
}
return {k: v for k, v in out.items() if v not in (None, {}, [], "")}