from apollo_utils.core.constants import MARKET_WORLDWIDE from apollo_utils.service.schemas.fields.datetime import DateStringField from apollo_utils.service.schemas.fields.market import MarketField from apollo_utils.service.schemas.fields.string import CustomStringField from apollo_utils.service.schemas.mixins.date import DateRangeOptionalMixin from marshmallow import fields from server.schemas.base.schemas import RequestSchema, Schema class PlaylistMeta(Schema): name = fields.String() playlist_id = fields.String() country_code = fields.String() uri = fields.String() num_tracks = fields.Integer() rank = fields.Integer() dsp_playlist_id = fields.String() amazon_playlist_id = fields.String() image_url = fields.String(attribute="image.uri") class PlaylistTracks: class Request(RequestSchema, DateRangeOptionalMixin): playlist_id = CustomStringField(required=True, prefix="amazon_") country_code = MarketField(gl=MARKET_WORLDWIDE, default=None, missing=None) class Response(Schema): class TrackItem(Schema): class StreamingStats(Schema): isrc_in_playlist = fields.Integer() playlist = fields.Integer() class TrackMeta(Schema): class ArtistMeta(Schema): id = fields.String() name = fields.String() name = fields.String() track_id = fields.String() amazon_track_id = fields.String() apple_track_id = fields.String() country_code = fields.String() artists = fields.List(fields.Nested(ArtistMeta)) image_url = fields.String() release_date = DateStringField() isrc = fields.String() current = fields.Integer() previous = fields.Integer() date = DateStringField() trend = fields.Integer() num_days_on = fields.Integer() num_weeks_on = fields.Integer() earliest_position_date = DateStringField() latest_position_date = DateStringField() trend_change_14_days = fields.Integer() previous_position_change_14_days = fields.Integer() last_date_change_14_days = DateStringField() track = fields.Nested(TrackMeta) playlist = fields.Nested(PlaylistMeta) items = fields.List(fields.Nested(TrackItem)) playlist = fields.Nested(PlaylistMeta)