from apollo_utils.core.constants.dsp import DSP from apollo_utils.service.schemas.fields.amazon_id import AmazonPlaylistIdField from apollo_utils.service.schemas.fields.datetime import DateStringField from apollo_utils.service.schemas.mixins.isrc import IsrcRequiredMixin from apollo_utils.service.schemas.swagger.types import ApispecTypes from marshmallow import fields from server.schemas.base.schemas import RequestSchema, Schema class PlaylistsAmazonTrack: """Amazon Track In Playlist Request/Response schema(s)""" class Request(RequestSchema, IsrcRequiredMixin): playlist_id = AmazonPlaylistIdField(required=True, dsp=DSP.AMAZON) class Response(Schema): playlist_id = AmazonPlaylistIdField() playlist_name = fields.String(attribute="playlist.name", dump_default=None) country_code = fields.String(attribute="playlist.country_code", dump_default=None) playlist_image = fields.Url(attribute="playlist.image.uri", dump_default=None) current_position = fields.Integer(attribute="current", dump_default=None) isrc = fields.String(dump_default=None) added_date = DateStringField(attribute="earliest_position_date", dump_default=None) changed_date = DateStringField(attribute="date", dump_default=None) is_new = fields.Function( lambda obj: not obj["num_days_on"] if obj.get("num_days_on") is not None else None, example=ApispecTypes.BOOLEAN, ) trend = fields.Integer(attribute="trend_change_14_days", dump_default=None) previous_position = fields.Integer(attribute="previous_position_change_14_days", dump_default=None)