models now are inherently SQL tables with SQLAlchemy's tricks.
Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
+52
-13
@@ -3,23 +3,62 @@ import dataclasses
|
||||
import datetime
|
||||
import typing
|
||||
|
||||
import sqlalchemy.orm # type: ignore [import]
|
||||
|
||||
from playlist.data import base
|
||||
|
||||
mapper_registry = sqlalchemy.orm.registry()
|
||||
|
||||
|
||||
@mapper_registry.mapped
|
||||
@dataclasses.dataclass
|
||||
class Track(base.BaseData):
|
||||
"""Model defining a Track object."""
|
||||
|
||||
id: int
|
||||
track_num: int
|
||||
title: str
|
||||
artist: str
|
||||
album_num: int
|
||||
album: str
|
||||
album_artist: str
|
||||
duration: int
|
||||
rating: typing.Optional[int]
|
||||
comments: str
|
||||
added: datetime.datetime
|
||||
play_count: int
|
||||
played: typing.Optional[datetime.datetime]
|
||||
__tablename__ = "tracks"
|
||||
|
||||
id: int = dataclasses.field(
|
||||
init=False,
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)},
|
||||
)
|
||||
plex_id: int = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, nullable=False)},
|
||||
)
|
||||
track_num: int = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, nullable=False)},
|
||||
)
|
||||
title: str = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.String(100), nullable=False)},
|
||||
)
|
||||
artist: str = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.String(100), nullable=False)},
|
||||
)
|
||||
album_num: int = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, nullable=False)},
|
||||
)
|
||||
album: str = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.String(100), nullable=False)},
|
||||
)
|
||||
album_artist: str = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.String(100), nullable=False)},
|
||||
)
|
||||
duration: int = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, nullable=False)},
|
||||
)
|
||||
comments: str = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.String(2000), nullable=False)},
|
||||
)
|
||||
added: datetime.datetime = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.DateTime, nullable=False)},
|
||||
)
|
||||
play_count: int = dataclasses.field(
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer, nullable=False)},
|
||||
)
|
||||
rating: typing.Optional[int] = dataclasses.field(
|
||||
default=None,
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.Integer)},
|
||||
)
|
||||
played: typing.Optional[datetime.datetime] = dataclasses.field(
|
||||
default=None,
|
||||
metadata={"sa": sqlalchemy.Column(sqlalchemy.DateTime)},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user