Get row and track from playlist.tracks with tests

This commit is contained in:
Keith Edmunds 2022-02-16 23:01:04 +00:00
parent ab9955b88a
commit b92a0927f8
2 changed files with 36 additions and 5 deletions

View File

@ -9,7 +9,7 @@ from datetime import datetime
from mutagen.flac import FLAC
from mutagen.mp3 import MP3
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
from sqlalchemy import (
Boolean,
Column,
@ -21,8 +21,9 @@ from sqlalchemy import (
func
)
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
from sqlalchemy.orm import backref, relationship, sessionmaker, scoped_session
from sqlalchemy.orm.collections import attribute_mapped_collection
from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
from app.config import Config
from app.helpers import (
@ -237,6 +238,7 @@ class Playlists(Base):
back_populates="playlist")
tracks = association_proxy('playlist_tracks', 'tracks')
row = association_proxy('playlist_tracks', 'row')
def __init__(self, session, name):
self.name = name
@ -341,7 +343,13 @@ class PlaylistTracks(Base):
track_id = Column(Integer, ForeignKey('tracks.id'), primary_key=True)
row = Column(Integer, nullable=False)
tracks = relationship("Tracks")
playlist = relationship(Playlists, backref=backref("playlist_tracks"))
playlist = relationship(
Playlists,
backref=backref(
"playlist_tracks",
collection_class=attribute_mapped_collection("row")
)
)
def __init__(self, session, playlist_id, track_id, row):
DEBUG(f"PlaylistTracks.__init__({playlist_id=}, {track_id=}, {row=})")

View File

@ -172,13 +172,36 @@ def test_playlist_add_track(session):
track_path = "/a/b/c"
track = Tracks(session, track_path)
playlist.add_track(session, track)
row = 17
playlist.add_track(session, track, row)
assert len(playlist.tracks) == 1
playlist_track = playlist.tracks[0]
playlist_track = playlist.tracks[row]
assert playlist_track.path == track_path
def test_playlist_tracks(session):
# We need a playlist
playlist = Playlists(session, "my playlist")
# We need two tracks
track1_path = "/a/b/c"
track1_row = 17
track1 = Tracks(session, track1_path)
track2_path = "/x/y/z"
track2_row = 29
track2 = Tracks(session, track2_path)
playlist.add_track(session, track1, track1_row)
playlist.add_track(session, track2, track2_row)
tracks = playlist.tracks
assert tracks[track1_row] == track1
assert tracks[track2_row] == track2
def test_playlist_open_and_close(session):
# We need a playlist