42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""Contains the data models used throughout the application."""
|
|
import dataclasses
|
|
import datetime
|
|
|
|
import desert
|
|
import marshmallow
|
|
|
|
from playlist.data import base
|
|
from playlist.data.sql import db
|
|
|
|
|
|
@dataclasses.dataclass
|
|
class Track(db.Model, base.BaseData): # type: ignore [misc]
|
|
"""Model defining a Track object."""
|
|
|
|
___tablename__ = "tracks"
|
|
|
|
id: int = dataclasses.field(
|
|
init=False,
|
|
repr=False,
|
|
default=db.Column(db.Integer(), primary_key=True),
|
|
)
|
|
plex_id: int = db.Column(db.Integer)
|
|
track_num: int = db.Column(db.Integer)
|
|
title: str = db.Column(db.String)
|
|
artist: str = db.Column(db.String)
|
|
album_num: int = db.Column(db.Integer)
|
|
album: str = db.Column(db.String)
|
|
album_artist: str = db.Column(db.String)
|
|
duration: int = db.Column(db.Integer)
|
|
comments: str = db.Column(db.String)
|
|
added: datetime.datetime = db.Column(db.DateTime)
|
|
play_count: int = db.Column(db.Integer)
|
|
rating: int | None = dataclasses.field(
|
|
default=db.Column(db.Integer(), nullable=True, default=None),
|
|
metadata=desert.metadata(marshmallow.fields.Int(allow_none=True)),
|
|
)
|
|
played: datetime.datetime | None = dataclasses.field(
|
|
default=db.Column(db.Integer, nullable=True, default=None),
|
|
metadata=desert.metadata(marshmallow.fields.DateTime(allow_none=True)),
|
|
)
|