import asyncio from aiohttp import web from aiohttp_apispec import docs from server.client import services from server.constants import BASE_API_PREFIX from server.schemas.playlists.v0.new_music_friday import PlaylistsSummaryNMF from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/playlists/summary/nmf/") @docs(tags=["playlists", "nmf"], summary="Get NMF available dates and playlists.") @dump_response_schema(PlaylistsSummaryNMF.Response) async def get(request: web.Request): tasks = [ services.apollo.get_nmf_available_dates(), services.apollo.get_nmf_playlists(), services.apollo.get_value_by_key(key="nmf_job_run_ts"), ] available_dates, playlists, last_job_run = await asyncio.gather(*tasks) latest_date = max(available_dates) return { "available_dates": available_dates, "playlists": playlists, "outdated_playlists": list( p for p in playlists if not p["fridayLastUpdatedDate"] or p["fridayLastUpdatedDate"] < latest_date ), "last_updated": last_job_run, }