from apollo_utils.service.schemas.fields.datetime import DateTimeStringField from apollo_utils.service.schemas.fields.enum import EnumListField from apollo_utils.service.schemas.mixins.market import MarketDefaultGlobalMixin from marshmallow import fields from server.constants.distributors import DISTRIBUTORS from server.schemas.base.pagination import PaginationResultMixin, get_pagination_mixin from server.schemas.base.schemas import RequestSchema, Schema class NMFTracks: class Request(RequestSchema, MarketDefaultGlobalMixin, get_pagination_mixin(page_limit=None)): """Request schema to get NMF tracks.""" nmf_date = fields.Date(required=True, data_key="date") distributors = EnumListField(DISTRIBUTORS, unify=True, missing=[DISTRIBUTORS.SME], as_enum=True) class Response(Schema, PaginationResultMixin): """Response NMF tracks schema.""" class NMFTracksItem(Schema): """NMF track schema.""" class NMFTracksArtistItem(Schema): id = fields.String() name = fields.String() class NMFTracksPlaylistItem(Schema): playlistId = fields.String() countryCode = fields.String() addedDate = DateTimeStringField() position = fields.Integer() playlistImageUrl = fields.String() isrc = fields.String() trackId = fields.String() distributed_by = fields.String(default=None) artists = fields.List(fields.Nested(NMFTracksArtistItem)) trackName = fields.String() topTenFeatureCount = fields.Integer() albumImageUrl = fields.String() sonyRelease = fields.Raw() playlists = fields.List(fields.Nested(NMFTracksPlaylistItem)) isSony = fields.Boolean() items = fields.List(fields.Nested(NMFTracksItem))