Source code for pylav.nodes.api.responses.track

from __future__ import annotations

import dataclasses
from typing import NotRequired  # noqa

from pylav.constants.node import TRACK_VERSION
from pylav.nodes.api.responses.shared import TrackPluginInfo
from pylav.storage.database.tables.tracks import TrackRow
from pylav.type_hints.dict_typing import JSON_DICT_TYPE


[docs] @dataclasses.dataclass(repr=True, frozen=True, kw_only=True, slots=True) class Info: identifier: str isSeekable: bool author: str length: int isStream: bool position: int title: str uri: str | None sourceName: str | None artworkUrl: str | None = None isrc: str | None = None version: NotRequired[int] = TRACK_VERSION
[docs] def to_dict(self) -> JSON_DICT_TYPE: return dataclasses.asdict(self)
[docs] @dataclasses.dataclass(repr=True, frozen=True, kw_only=True, slots=True) class Track: info: Info encoded: str = None pluginInfo: TrackPluginInfo | None = None def __post_init__(self) -> None: if self.pluginInfo is None: object.__setattr__(self, "pluginInfo", TrackPluginInfo(kwargs=None))
[docs] def set_version(self, version: int) -> None: object.__setattr__(self.info, "version", version)
[docs] def to_dict(self) -> JSON_DICT_TYPE: return { "info": self.info.to_dict(), "encoded": self.encoded, "pluginInfo": self.pluginInfo.to_dict() if self.pluginInfo else None, }
[docs] def to_database(self) -> dict[str, JSON_DICT_TYPE]: return { TrackRow.encoded._meta.db_column_name: self.encoded, TrackRow.pluginInfo._meta.db_column_name: self.pluginInfo.to_dict() if self.pluginInfo else None, TrackRow.info._meta.db_column_name: self.info.to_dict(), }