from flask import request from tracker import db from . import ChartResource from api import models class CuratedList(ChartResource): def get(self, list_id): return self.post(list_id) def post(self, list_id): limit = 20 offset = int(request.args.get("offset") or "0") username = self.user.name ids_list = self.Session.execute( """ select id, track_scid, track_spyid, video_ytid, custom_item_id from curated_list_items c where c.list_id = :list_id order by id desc limit :limit offset :offset """, params=dict(list_id=list_id, limit=limit, offset=offset), ).fetchall() tracks = list(models.soundcloud_tracks([i[1] for i in ids_list if i[1]])) + list( models.spotify_tracks([i[2] for i in ids_list if i[2]]) ) videos = list(models.youtube_videos([i[3] for i in ids_list if i[3]])) custom_items = list(models.custom_items([i[4] for i in ids_list if i[4]])) next_uri = ( None if not ids_list else "/api/charts/curated/{}?offset={}".format(list_id, offset + limit) ) results = [ { "track_scid": r[1], "track_spyid": r[2], "video_ytid": r[3], "custom_item_id": r[4], "video": ( None if not r[3] else next((v["video"] for v in videos if v["ytid"] == r[3]), None) ), "track": ( None if not (r[1] or r[2]) else next( ( t["track"] for t in tracks if (t.get("scid") and t.get("scid") == r[1]) or (t.get("spyid") and t.get("spyid") == r[2]) ), None, ) ), "customItem": ( None if not r[4] else next((c["customItem"] for c in custom_items if c["custom_item_id"] == r[4]), None) ) } for r in ids_list ] return {"nextApi": next_uri, "results": results}