from aiohttp import web from aiohttp_apispec import docs, querystring_schema from server.client import services from server.constants import BASE_API_PREFIX from server.constants.market import Market from server.schemas.youtube.demographics import YoutubeDemographics from server.utils.response import dump_response_schema from server.utils.youtube.demographics import define_demographics_popularity router = web.RouteTableDef() @router.get(BASE_API_PREFIX + "/youtube/demographics/") @docs(tags=["youtube"], summary="Groups of users, among whom the video is the most popular.") @querystring_schema(YoutubeDemographics.Request) @dump_response_schema(YoutubeDemographics.Response) async def get(request: web.Request): params = request["querystring"] video_id, start_date, end_date, markets_list = ( params["video_id"], params["start_date"], params["end_date"], params["markets_list"], ) country_code = markets_list or Market.WORLDWIDE demographics_data = await services.dsp.get_demographics( group_by="video_id", video_id=video_id, start_date=start_date, end_date=end_date, country_code=country_code, content_type="partner_uploaded,premium_ugc", only="demographics", ) result = { "gender_most_popular": None, "gender_percentage": None, "age_band_most_popular": None, "age_band_percentage": None, } if demographics_data: data = demographics_data[0]["metrics"] if data["views"] != 0: result = define_demographics_popularity(data) return result