62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
@dataclass
|
|
class ListenBrainzScrobble:
|
|
artist_name: str
|
|
release_name: str
|
|
track_name: str
|
|
listened_at: datetime
|
|
|
|
# Optional
|
|
artist_mbids: list[str] | None = None
|
|
release_group_mbid: str | None = None
|
|
release_mbid: str | None = None
|
|
recording_mbid: str | None = None
|
|
track_mbid: str | None = None
|
|
work_mbids: list[str] | None = None
|
|
tracknumber: str | None = None
|
|
isrc: str | None = None
|
|
spotify_id: str | None = None
|
|
tags: list[str] | None = None
|
|
media_player: str | None = None
|
|
media_player_version: str | None = None
|
|
submission_client: str | None = None
|
|
submission_client_version: str | None = None
|
|
music_service: str | None = None
|
|
music_service_name: str | None = None
|
|
origin_url: str | None = None
|
|
duration: int | None = None
|
|
duration_ms: int | None = None
|
|
|
|
@staticmethod
|
|
def from_json(data: dict):
|
|
additional_info_keys = [
|
|
'artist_mbids',
|
|
'release_group_mbid',
|
|
'release_mbid',
|
|
'recording_mbid',
|
|
'track_mbid',
|
|
'work_mbids',
|
|
'tracknumber',
|
|
'isrc',
|
|
'spotify_id',
|
|
'tags',
|
|
'media_player',
|
|
'media_player_version',
|
|
'submission_client',
|
|
'submission_client_version',
|
|
'music_service',
|
|
'music_service_name',
|
|
'origin_url',
|
|
'duration',
|
|
'duration_ms'
|
|
]
|
|
|
|
add_info = data['additional_info']
|
|
return ListenBrainzScrobble(
|
|
artist_name=data['artist_name'],
|
|
release_name=data['release_name'],
|
|
track_name=data['track_name'],
|
|
listened_at=datetime.fromtimestamp(data['listened_at']),
|
|
**{key:(add_info[key] if key in add_info else None) for key in additional_info_keys}
|
|
) |