diff --git a/spotify_model/__init__.py b/spotify_model/__init__.py index 5ee33b2..238720f 100644 --- a/spotify_model/__init__.py +++ b/spotify_model/__init__.py @@ -2,8 +2,15 @@ Client-agnostic model for marshalling Spotify data types. """ -from .album import SearchAlbum +from .album import SearchAlbum, SimplifiedAlbum from .extra import ReleaseDatePrecision from .paging import Paging +from .track import SimplifiedTrack -__all__ = ["Paging", "ReleaseDatePrecision", "SearchAlbum"] +__all__ = [ + "Paging", + "ReleaseDatePrecision", + "SearchAlbum", + "SimplifiedAlbum", + "SimplifiedTrack", +] diff --git a/spotify_model/album.py b/spotify_model/album.py index e0d750c..a6b1261 100644 --- a/spotify_model/album.py +++ b/spotify_model/album.py @@ -7,6 +7,7 @@ from typing import Any, Dict, List, Union from pydantic import BaseModel, Field from .extra import ReleaseDatePrecision +from .paging import Paging class SearchAlbum(BaseModel): @@ -25,3 +26,18 @@ class SearchAlbum(BaseModel): total_tracks: int type_: str = Field(alias="type") uri: str + + +class SimplifiedAlbum(SearchAlbum): + """ + Album as returned by the Album API + + https://developer.spotify.com/documentation/web-api/reference/#object-simplifiedalbumobject + """ + + copyrights: List[Dict[str, str]] + external_ids: Dict[str, str] + genres: List[str] + label: str + popularity: int + tracks: Paging diff --git a/spotify_model/track.py b/spotify_model/track.py new file mode 100644 index 0000000..403ef44 --- /dev/null +++ b/spotify_model/track.py @@ -0,0 +1,32 @@ +""" +Classes designed to manage track-like objects +""" +from typing import Dict, List, Optional, Union + +from pydantic import BaseModel, Field + + +class SimplifiedTrack(BaseModel): + """ + Track as returned by the Tracks API + + https://developer.spotify.com/documentation/web-api/reference/#object-simplifiedtrackobject + """ + + artists: List[Dict[str, Union[Dict[str, str], str]]] + available_markets: List[str] + disc_number: int + duration_ms: int + explicit: bool + external_urls: Dict[str, str] + href: str + spotify_id: str = Field(alias="id") + is_local: bool + is_playable: Optional[bool] + linked_from: Optional[str] + name: str + preview_url: str + restrictions: Optional[str] + track_number: int + type_: str = Field(alias="type") + uri: str