Rolled back complexity of _tracks_where

This commit is contained in:
Keith Edmunds 2025-04-11 13:04:58 +01:00
parent 83f5ad5303
commit e03e64542f

View File

@ -129,12 +129,10 @@ def remove_colour_substring(text: str) -> str:
# Track functions # Track functions
@log_call @log_call
def _tracks_where( def _tracks_where(query: BinaryExpression | ColumnElement[bool],) -> list[TrackDTO]:
query: BinaryExpression | ColumnElement[bool], """
filter_by_last_played: bool = False, filter_by_last_played: bool = False,
last_played_before: dt.datetime | None = None, last_played_before: dt.datetime | None = None,
) -> list[TrackDTO]:
"""
Return tracks selected by query Return tracks selected by query
""" """
@ -150,24 +148,8 @@ def _tracks_where(
.group_by(LatestPlaydate.track_id) .group_by(LatestPlaydate.track_id)
.subquery() .subquery()
) )
if not filter_by_last_played: stmt = (
query = query.outerjoin( select(
latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id
)
else:
# We are filtering by last played. If last_played_before is None,
# we want tracks that have never been played
if last_played_before is None:
query = query.outerjoin(Playdates, Tracks.id == Playdates.track_id).where(
Playdates.id.is_(None)
)
else:
query = query.join(
latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id
).where(latest_playdate_subq.c.max_last_played < last_played_before)
pass
stmt = select(
Tracks.id.label("track_id"), Tracks.id.label("track_id"),
Tracks.artist, Tracks.artist,
Tracks.bitrate, Tracks.bitrate,
@ -179,7 +161,10 @@ def _tracks_where(
Tracks.start_gap, Tracks.start_gap,
Tracks.title, Tracks.title,
latest_playdate_subq.c.lastplayed, latest_playdate_subq.c.lastplayed,
).where(query) )
.outerjoin(latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id)
.where(query)
)
results: list[TrackDTO] = [] results: list[TrackDTO] = []
@ -335,6 +320,8 @@ def get_filtered_tracks(filter: Filter) -> list[TrackDTO]:
Return tracks matching filter Return tracks matching filter
""" """
with db.Session() as session:
return Tracks.get_filtered_tracks(session, Filter)
# Create a base query # Create a base query
query = Tracks.id > 0 query = Tracks.id > 0
@ -903,7 +890,7 @@ def get_playlist_row(playlistrow_id: int) -> PlaylistRowDTO | None:
note=record.note, note=record.note,
played=record.played, played=record.played,
playlist_id=record.playlist_id, playlist_id=record.playlist_id,
playlistrow_id=record.playlistrow_id, playlistrow_id=record.id,
row_number=record.row_number, row_number=record.row_number,
track=track, track=track,
) )