|
|
@ -1,106 +1,106 @@ |
|
|
|
from __future__ import annotations |
|
|
|
from __future__ import annotations |
|
|
|
|
|
|
|
|
|
|
|
from typing import List |
|
|
|
from typing import List, Optional |
|
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, Field |
|
|
|
from pydantic import BaseModel, Field |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Artwork(BaseModel): |
|
|
|
class Artwork(BaseModel): |
|
|
|
width: int |
|
|
|
width: Optional[int] = None |
|
|
|
url: str |
|
|
|
url: Optional[str] = None |
|
|
|
height: int |
|
|
|
height: Optional[int] = None |
|
|
|
textColor3: str |
|
|
|
textColor3: Optional[str] = None |
|
|
|
textColor2: str |
|
|
|
textColor2: Optional[str] = None |
|
|
|
textColor4: str |
|
|
|
textColor4: Optional[str] = None |
|
|
|
textColor1: str |
|
|
|
textColor1: Optional[str] = None |
|
|
|
bgColor: str |
|
|
|
bgColor: Optional[str] = None |
|
|
|
hasP3: bool |
|
|
|
hasP3: Optional[bool] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PlayParams(BaseModel): |
|
|
|
class PlayParams(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
kind: str |
|
|
|
kind: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Attributes(BaseModel): |
|
|
|
class Attributes(BaseModel): |
|
|
|
copyright: str |
|
|
|
copyright: Optional[str] = None |
|
|
|
genreNames: List[str] |
|
|
|
genreNames: List[Optional[str]] = None |
|
|
|
releaseDate: str |
|
|
|
releaseDate: Optional[str] = None |
|
|
|
upc: str |
|
|
|
upc: Optional[str] = None |
|
|
|
isMasteredForItunes: bool |
|
|
|
isMasteredForItunes: Optional[bool] = None |
|
|
|
artwork: Artwork |
|
|
|
artwork: Artwork |
|
|
|
url: str |
|
|
|
url: Optional[str] = None |
|
|
|
playParams: PlayParams |
|
|
|
playParams: PlayParams |
|
|
|
recordLabel: str |
|
|
|
recordLabel: Optional[str] = None |
|
|
|
isCompilation: bool |
|
|
|
isCompilation: Optional[bool] = None |
|
|
|
trackCount: int |
|
|
|
trackCount: Optional[int] = None |
|
|
|
isPrerelease: bool |
|
|
|
isPrerelease: Optional[bool] = None |
|
|
|
audioTraits: List[str] |
|
|
|
audioTraits: List[Optional[str]] = None |
|
|
|
isSingle: bool |
|
|
|
isSingle: Optional[bool] = None |
|
|
|
name: str |
|
|
|
name: Optional[str] = None |
|
|
|
artistName: str |
|
|
|
artistName: Optional[str] = None |
|
|
|
isComplete: bool |
|
|
|
isComplete: Optional[bool] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Artwork1(BaseModel): |
|
|
|
class Artwork1(BaseModel): |
|
|
|
width: int |
|
|
|
width: Optional[int] = None |
|
|
|
url: str |
|
|
|
url: Optional[str] = None |
|
|
|
height: int |
|
|
|
height: Optional[int] = None |
|
|
|
textColor3: str |
|
|
|
textColor3: Optional[str] = None |
|
|
|
textColor2: str |
|
|
|
textColor2: Optional[str] = None |
|
|
|
textColor4: str |
|
|
|
textColor4: Optional[str] = None |
|
|
|
textColor1: str |
|
|
|
textColor1: Optional[str] = None |
|
|
|
bgColor: str |
|
|
|
bgColor: Optional[str] = None |
|
|
|
hasP3: bool |
|
|
|
hasP3: Optional[bool] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PlayParams1(BaseModel): |
|
|
|
class PlayParams1(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
kind: str |
|
|
|
kind: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Preview(BaseModel): |
|
|
|
class Preview(BaseModel): |
|
|
|
url: str |
|
|
|
url: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Attributes1(BaseModel): |
|
|
|
class Attributes1(BaseModel): |
|
|
|
hasTimeSyncedLyrics: bool |
|
|
|
hasTimeSyncedLyrics: Optional[bool] = None |
|
|
|
albumName: str |
|
|
|
albumName: Optional[str] = None |
|
|
|
genreNames: List[str] |
|
|
|
genreNames: List[Optional[str]] = None |
|
|
|
trackNumber: int |
|
|
|
trackNumber: Optional[int] = None |
|
|
|
durationInMillis: int |
|
|
|
durationInMillis: Optional[int] = None |
|
|
|
releaseDate: str |
|
|
|
releaseDate: Optional[str] = None |
|
|
|
isVocalAttenuationAllowed: bool |
|
|
|
isVocalAttenuationAllowed: Optional[bool] = None |
|
|
|
isMasteredForItunes: bool |
|
|
|
isMasteredForItunes: Optional[bool] = None |
|
|
|
isrc: str |
|
|
|
isrc: Optional[str] = None |
|
|
|
artwork: Artwork1 |
|
|
|
artwork: Artwork1 |
|
|
|
composerName: str |
|
|
|
composerName: Optional[str] = None |
|
|
|
audioLocale: str |
|
|
|
audioLocale: Optional[str] = None |
|
|
|
playParams: PlayParams1 |
|
|
|
playParams: PlayParams1 |
|
|
|
url: str |
|
|
|
url: Optional[str] = None |
|
|
|
discNumber: int |
|
|
|
discNumber: Optional[int] = None |
|
|
|
hasCredits: bool |
|
|
|
hasCredits: Optional[bool] = None |
|
|
|
isAppleDigitalMaster: bool |
|
|
|
isAppleDigitalMaster: Optional[bool] = None |
|
|
|
hasLyrics: bool |
|
|
|
hasLyrics: Optional[bool] = None |
|
|
|
audioTraits: List[str] |
|
|
|
audioTraits: List[Optional[str]] = None |
|
|
|
name: str |
|
|
|
name: Optional[str] = None |
|
|
|
previews: List[Preview] |
|
|
|
previews: List[Preview] |
|
|
|
artistName: str |
|
|
|
artistName: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Attributes2(BaseModel): |
|
|
|
class Attributes2(BaseModel): |
|
|
|
name: str |
|
|
|
name: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Datum2(BaseModel): |
|
|
|
class Datum2(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
type: str |
|
|
|
type: Optional[str] = None |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
attributes: Attributes2 |
|
|
|
attributes: Attributes2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Artists(BaseModel): |
|
|
|
class Artists(BaseModel): |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
data: List[Datum2] |
|
|
|
data: List[Datum2] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -109,36 +109,36 @@ class Relationships1(BaseModel): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Datum1(BaseModel): |
|
|
|
class Datum1(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
type: str |
|
|
|
type: Optional[str] = None |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
attributes: Attributes1 |
|
|
|
attributes: Attributes1 |
|
|
|
relationships: Relationships1 |
|
|
|
relationships: Relationships1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Tracks(BaseModel): |
|
|
|
class Tracks(BaseModel): |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
data: List[Datum1] |
|
|
|
data: List[Datum1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Attributes3(BaseModel): |
|
|
|
class Attributes3(BaseModel): |
|
|
|
name: str |
|
|
|
name: Optional[str] = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Datum3(BaseModel): |
|
|
|
class Datum3(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
type: str |
|
|
|
type: Optional[str] = None |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
attributes: Attributes3 |
|
|
|
attributes: Attributes3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Artists1(BaseModel): |
|
|
|
class Artists1(BaseModel): |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
data: List[Datum3] |
|
|
|
data: List[Datum3] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RecordLabels(BaseModel): |
|
|
|
class RecordLabels(BaseModel): |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
data: List |
|
|
|
data: List |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -149,9 +149,9 @@ class Relationships(BaseModel): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Datum(BaseModel): |
|
|
|
class Datum(BaseModel): |
|
|
|
id: str |
|
|
|
id: Optional[str] = None |
|
|
|
type: str |
|
|
|
type: Optional[str] = None |
|
|
|
href: str |
|
|
|
href: Optional[str] = None |
|
|
|
attributes: Attributes |
|
|
|
attributes: Attributes |
|
|
|
relationships: Relationships |
|
|
|
relationships: Relationships |
|
|
|
|
|
|
|
|
|
|
|