44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
from platypush.schemas.mopidy import MopidyTrackSchema
|
|
|
|
from ._exc import EmptyTrackException
|
|
|
|
|
|
@dataclass
|
|
class MopidyTrack:
|
|
"""
|
|
Model for a Mopidy track.
|
|
"""
|
|
|
|
uri: str
|
|
artist: Optional[str] = None
|
|
title: Optional[str] = None
|
|
album: Optional[str] = None
|
|
artist_uri: Optional[str] = None
|
|
album_uri: Optional[str] = None
|
|
time: Optional[float] = None
|
|
playlist_pos: Optional[int] = None
|
|
track_id: Optional[int] = None
|
|
track_no: Optional[int] = None
|
|
date: Optional[str] = None
|
|
genre: Optional[str] = None
|
|
type: str = 'track'
|
|
|
|
@classmethod
|
|
def parse(cls, track: dict) -> Optional["MopidyTrack"]:
|
|
"""
|
|
Parse a Mopidy track from a dictionary received from the Mopidy API.
|
|
"""
|
|
try:
|
|
return cls(**MopidyTrackSchema().load(track)) # type: ignore
|
|
except EmptyTrackException:
|
|
return None
|
|
|
|
def to_dict(self) -> dict:
|
|
"""
|
|
Convert the Mopidy track to a dictionary.
|
|
"""
|
|
return dict(MopidyTrackSchema().dump(self))
|