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.images import ImageSchema 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 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 ChartSchema(Schema): class Meta: include = { "chart_id": fields.String(), "name": fields.String(), "chart_group": fields.String(), "country_code": fields.String(), "dsp": fields.String(), "total_positions": fields.Integer(), } class VideoSchema(Schema): class Meta: class ThumbnailsSchema(Schema): class Meta: include = { "default": fields.Nested(ImageSchema), "medium": fields.Nested(ImageSchema), "high": fields.Nested(ImageSchema), "standard": fields.Nested(ImageSchema), "maxres": fields.Nested(ImageSchema), } include = { "video_id": fields.String(), "video_title": fields.String(), "channel_id": fields.String(), "dsp_channel_id": fields.String(), "channel_title": fields.String(), "content_type": fields.String(), "date_uploaded": fields.Date(format="iso"), "dsp": fields.String(), "dsp_video_id": fields.String(), "duration_seconds": fields.Integer(), "is_sony": fields.Boolean(), "views": fields.Integer(), "thumbnails": fields.Nested(ThumbnailsSchema), }