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.flac import FLAC
from mutagen.mp3 import MP3 from mutagen.mp3 import MP3
from sqlalchemy.ext.associationproxy import association_proxy 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 ( from sqlalchemy import (
Boolean, Boolean,
Column, Column,
@ -21,8 +21,9 @@ from sqlalchemy import (
func func
) )
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
from sqlalchemy.orm import backref, relationship, sessionmaker, scoped_session 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.config import Config
from app.helpers import ( from app.helpers import (
@ -237,6 +238,7 @@ class Playlists(Base):
back_populates="playlist") back_populates="playlist")
tracks = association_proxy('playlist_tracks', 'tracks') tracks = association_proxy('playlist_tracks', 'tracks')
row = association_proxy('playlist_tracks', 'row')
def __init__(self, session, name): def __init__(self, session, name):
self.name = name self.name = name
@ -341,7 +343,13 @@ class PlaylistTracks(Base):
track_id = Column(Integer, ForeignKey('tracks.id'), primary_key=True) track_id = Column(Integer, ForeignKey('tracks.id'), primary_key=True)
row = Column(Integer, nullable=False) row = Column(Integer, nullable=False)
tracks = relationship("Tracks") 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): def __init__(self, session, playlist_id, track_id, row):
DEBUG(f"PlaylistTracks.__init__({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_path = "/a/b/c"
track = Tracks(session, track_path) track = Tracks(session, track_path)
playlist.add_track(session, track) row = 17
playlist.add_track(session, track, row)
assert len(playlist.tracks) == 1 assert len(playlist.tracks) == 1
playlist_track = playlist.tracks[0] playlist_track = playlist.tracks[row]
assert playlist_track.path == track_path 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): def test_playlist_open_and_close(session):
# We need a playlist # We need a playlist