import datetime from apollo_utils.core.constants.dsp import DSP from apollo_utils.core.constants.market import GLOBAL_MARKET_CODE from apollo_utils.service.schemas.fields.market import DelphiMarketField from apollo_utils.service.schemas.fields.playlists import PlaylistIdField from marshmallow import fields, validate from server.schemas.base.schemas import RequestSchema, Schema from server.schemas.images.core_image_service import CoreImageServiceImageUrlField from server.utils.glom import glom from server.utils.playlists.common.dates import get_max_dsp_sync_date_time class V1PlaylistsSpotifyInfo: class Request( RequestSchema, ): playlist_id = fields.List( PlaylistIdField(required=True, dsp=DSP.SPOTIFY, validate=validate.Length(max=50)), data_key="id" ) class Response(Schema): id = PlaylistIdField(required=True, dsp=DSP.SPOTIFY, validate=validate.Length(max=50)) name = fields.String() updated_date = fields.Method("get_updated_date") image_url = CoreImageServiceImageUrlField() country_code = DelphiMarketField(serialize_market=GLOBAL_MARKET_CODE) owner = fields.String(attribute="owner.display_name", default=None) followers = fields.Int() personalized = fields.Bool(attribute="is_personalised") def get_updated_date(self, obj): if obj["is_personalised"]: date_list = glom(obj, "playlist.dsp_sync_date_time", default=[]) return get_max_dsp_sync_date_time(date_list) else: return datetime.date.today().isoformat()