62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
#!/usr/bin/python3
|
||
|
||
from dataclasses import dataclass, field
|
||
from typing import List, Optional, Dict, Any
|
||
|
||
from .common import IDs
|
||
from .user import userObject
|
||
|
||
@dataclass
|
||
class artistAlbumTrackPlaylistObject:
|
||
"""Artist when nested inside a track in a playlist context."""
|
||
type: str = "artistAlbumTrackPlaylist"
|
||
name: str = ""
|
||
ids: IDs = field(default_factory=IDs)
|
||
|
||
@dataclass
|
||
class albumTrackPlaylistObject:
|
||
"""Album when nested inside a track in a playlist context."""
|
||
type: str = "albumTrackPlaylist"
|
||
album_type: str = "" # "album" | "single" | "compilation"
|
||
title: str = ""
|
||
release_date: Dict[str, Any] = field(default_factory=dict) # ReleaseDate as dict
|
||
total_tracks: int = 0
|
||
total_discs: int = 1 # New field for multi-disc album support
|
||
images: List[Dict[str, Any]] = field(default_factory=list)
|
||
ids: IDs = field(default_factory=IDs)
|
||
artists: List[artistAlbumTrackPlaylistObject] = field(default_factory=list)
|
||
|
||
|
||
@dataclass
|
||
class artistTrackPlaylistObject:
|
||
"""Artist when nested inside a track in a playlist context."""
|
||
type: str = "artistTrackPlaylist"
|
||
name: str = ""
|
||
ids: IDs = field(default_factory=IDs)
|
||
|
||
|
||
@dataclass
|
||
class trackPlaylistObject:
|
||
"""Track when nested inside a playlist context."""
|
||
type: str = "trackPlaylist"
|
||
title: str = ""
|
||
position: int = 0 # Position in the playlist
|
||
duration_ms: int = 0 # mandatory
|
||
artists: List[artistTrackPlaylistObject] = field(default_factory=list)
|
||
album: albumTrackPlaylistObject = field(default_factory=albumTrackPlaylistObject)
|
||
ids: IDs = field(default_factory=IDs)
|
||
disc_number: int = 1
|
||
track_number: int = 1
|
||
explicit: bool = False
|
||
|
||
|
||
@dataclass
|
||
class playlistObject:
|
||
"""A user‑curated playlist, nesting trackPlaylistObject[]."""
|
||
type: str = "playlist"
|
||
title: str = ""
|
||
description: Optional[str] = None
|
||
owner: userObject = field(default_factory=userObject)
|
||
tracks: List[trackPlaylistObject] = field(default_factory=list)
|
||
images: List[Dict[str, Any]] = field(default_factory=list)
|
||
ids: IDs = field(default_factory=IDs) |