diff --git a/spotify_model/__init__.py b/spotify_model/__init__.py index f9ef499..28935b9 100644 --- a/spotify_model/__init__.py +++ b/spotify_model/__init__.py @@ -20,4 +20,5 @@ __all__ = [ "SimplifiedAlbum", "SimplifiedPlaylist", "SimplifiedTrack", + "Track", ] diff --git a/spotify_model/album.py b/spotify_model/album.py index 528faca..16360a4 100644 --- a/spotify_model/album.py +++ b/spotify_model/album.py @@ -30,7 +30,7 @@ class SearchAlbum(BaseModel): class SimplifiedAlbum(SearchAlbum): """ - Album as returned by the Album API + Album as returned by non-album APIs https://developer.spotify.com/documentation/web-api/reference/#object-simplifiedalbumobject """ diff --git a/spotify_model/track.py b/spotify_model/track.py index 1e44a70..8e8d99a 100644 --- a/spotify_model/track.py +++ b/spotify_model/track.py @@ -1,14 +1,18 @@ """ Classes designed to manage track-like objects """ +from datetime import datetime from typing import Dict, List, Optional, Union from pydantic import BaseModel, Field +from .album import SearchAlbum +from .user import PublicUser + class SimplifiedTrack(BaseModel): """ - Track as returned by the Tracks API + Track as returned by non-track APIs https://developer.spotify.com/documentation/web-api/reference/#object-simplifiedtrackobject """ @@ -28,5 +32,29 @@ class SimplifiedTrack(BaseModel): preview_url: Optional[str] restrictions: Optional[str] track_number: int - type_: str = Field(alias="type") + spotify_type: str = Field(alias="type") uri: str + + +class Track(SimplifiedTrack): + """ + Track as returned by the Tracks APIs + + https://developer.spotify.com/documentation/web-api/reference/#object-trackobject + """ + + album: SearchAlbum + external_ids: Dict[str, str] + popularity: int + + +class PlaylistTrack(BaseModel): + """ + Track as returned from a playlist + """ + + added_at: datetime + added_by: PublicUser + is_local: bool + primary_color: Optional[str] + track: Track