from apollo_utils.service.schemas.fields.enum import EnumListField from apollo_utils.service.schemas.mixins.date import DateRangeMixin from apollo_utils.service.schemas.mixins.dsp import get_dsp_list_mixin from apollo_utils.service.schemas.mixins.isrc import IsrcListRequiredMixin from marshmallow import fields from server.constants import DSP_SPOTIFY_APPLE_AMAZON_TIKTOK from server.constants.tracks import TracksTopMarketsTiktokInclude from server.schemas.base.schemas import RequestSchema, Schema class TracksTopMarketsItemSchema(Schema): market = fields.Str() streams = fields.Int() class TracksTopMarkets: class Request( RequestSchema, DateRangeMixin, IsrcListRequiredMixin, get_dsp_list_mixin(DSP_SPOTIFY_APPLE_AMAZON_TIKTOK, required=True, as_enum=False), ): limit = fields.Int(missing=15) include_worldwide = fields.Boolean(missing=False) combine = fields.Boolean(missing=False) metrics_list = EnumListField( TracksTopMarketsTiktokInclude, allow_all=True, as_enum=False, unify=True, data_key="metrics", missing=[TracksTopMarketsTiktokInclude.VIDEO_VIEWS.value], ) class Response(Schema): class Meta: include = { dsp: fields.List(fields.Nested(TracksTopMarketsItemSchema)) for dsp in DSP_SPOTIFY_APPLE_AMAZON_TIKTOK.values(with_all=True) }