from apollo_utils.service.schemas.base import RequestSchema from apollo_utils.service.schemas.fields.list import SplitUniqueListField from marshmallow import Schema, fields, validate from server.constants import dsp from server.schemas.delphi.mixins.list import ListParamsMixin from server.schemas.delphi.mixins.skippers import SkipEmptyDataMixin from server.schemas.delphi.mixins.track_id import TrackIdISRCListsRequiredMixin class DelphiTracksCharts: class DelphiRequest(TrackIdISRCListsRequiredMixin, SkipEmptyDataMixin, ListParamsMixin, RequestSchema): chart_date = fields.Date(format="iso", data_key="date") track_state_includes_list = SplitUniqueListField(fields.String(required=True), data_key="track_state_includes") metrics_dimension = fields.String() chart_type_list = SplitUniqueListField(fields.String(required=True), data_key="chart_type") chart_breakdown_list = SplitUniqueListField(fields.String(required=True), data_key="chart_breakdown") chart_country_code_list = SplitUniqueListField(fields.String(required=True), data_key="chart_country_code") chart_min_rank = fields.Integer() chart_max_rank = fields.Integer() min_track_position = fields.Integer() max_track_position = fields.Integer() class Request(DelphiRequest): dsp = fields.String(required=True, validate=validate.OneOf((dsp.APPLE, dsp.SPOTIFY))) class Response(Schema): licensors = fields.Raw() public_meta = fields.Raw() chart_meta = fields.Raw() lifetime_metrics = fields.Raw()