from apollo_utils.service.schemas.base import RequestSchema from apollo_utils.service.schemas.fields.list import SplitUniqueListField from apollo_utils.service.schemas.mixins.isrc import get_isrc_list_mixin from marshmallow import Schema, fields from server.schemas.delphi.mixins.content_type import ContentTypeListMixin from server.schemas.delphi.mixins.list import ListParamsMixin from server.schemas.delphi.mixins.offset_limit import DelphiOffsetLimitMixin from server.schemas.delphi.mixins.skippers import SkipEmptyDataMixin from server.schemas.delphi.mixins.sorting import DelphiSortingMixin from server.schemas.delphi.tracks.tiktok.analytics import DelphiTiktokTracksAnalyticsV3RequestSchema class DelphiChartPositionsDatesV3: class RequestSchema(RequestSchema): dsp_list = SplitUniqueListField(fields.String(), data_key="dsp") chart_group_list = SplitUniqueListField(fields.String(), data_key="chart_group") class ResponseSchema(Schema): class Meta: class ItemSchema(Schema): class Meta: include = { "chart_group": fields.String(), "dsp": fields.String(), "earliest_data_date": fields.Date(format="iso"), "latest_data_date": fields.Date(format="iso"), } include = {"items": fields.List(fields.Nested(ItemSchema)), "count": fields.Integer(required=True)} class BaseDelphiVideoPositionsChartsRequestSchema( SkipEmptyDataMixin, ListParamsMixin, DelphiSortingMixin, DelphiOffsetLimitMixin, ContentTypeListMixin, get_isrc_list_mixin(required=False), RequestSchema, ): artist_id = fields.String() chart_group = fields.String() chart_id = fields.String() country_code = fields.String() dsp = fields.String() expand_to_list = SplitUniqueListField(fields.String(), data_key="expand_to") include_list = SplitUniqueListField(fields.String(), data_key="include") is_sony = fields.Boolean() video_id_list = SplitUniqueListField(fields.String(), data_key="video_id") class DelphiTiktokTracksAnalyticsV3: class RequestSchema(DelphiTiktokTracksAnalyticsV3RequestSchema): all_countries_totals = fields.Boolean(missing=True) related_isrcs = fields.Boolean(missing=True) combine_isrc = fields.Boolean(missing=True) class ResponseSchema(Schema): class Meta: include = { "min_date": fields.Date(format="iso"), "max_date": fields.Date(format="iso"), "days_count": fields.Integer(), "breakdowns": fields.Raw(), }