import asyncio from aiohttp import web from aiohttp_apispec import docs, querystring_schema from apollo_utils.core.constants.dsp import DSP from server.client import services from server.constants import BASE_API_PREFIX from server.scenarios.playlists.amazon.markets import get_amazon_playlist_available_markets from server.schemas.base.market import AppleMarkets from server.schemas.playlists.amazon.markets import AmazonPlaylistMarkets from server.utils.response import dump_response_schema router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/playlists/markets/amazon/") @docs(tags=["amazon", "markets"], summary="Amazon markets.") @querystring_schema(AmazonPlaylistMarkets.Request) @dump_response_schema(AmazonPlaylistMarkets.Response(many=True)) async def get(request: web.Request): params = request["querystring"] return await get_amazon_playlist_available_markets(playlist_id=params["playlist_id"], sort_by="name") @router.get(BASE_API_PREFIX + "/playlists/markets/apple/") @docs(tags=["apple", "markets"], summary="Apple markets.") @querystring_schema(AppleMarkets.Request) @dump_response_schema(AppleMarkets.Response(many=True)) async def get(request: web.Request): params = request["querystring"] playlist_id = (params["playlist_id"],) delphi_markets, apollo_markets = await asyncio.gather( services.dsp.get_public_playlists(dsp=DSP.APPLE.value, playlist_id=playlist_id), services.apollo.get_markets(extended=True, additional_sorting=True), ) delphi_markets = [row["country_code"] for row in delphi_markets] merged_markets = [i for i in apollo_markets if i["code"] in delphi_markets] return merged_markets