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 ValidationError, fields, validates_schema from server.schemas.delphi.mixins.dsp import DelphiDSPMixin from server.schemas.delphi.mixins.expand_to import DelphiExpandToMixin from server.schemas.delphi.mixins.offset_limit import DelphiOffsetLimitMixin from server.schemas.delphi.mixins.sorting import DelphiSortingMixin class DelphiVideosParams( get_isrc_list_mixin(required=False), DelphiOffsetLimitMixin, DelphiSortingMixin, DelphiExpandToMixin, DelphiDSPMixin, RequestSchema, ): artist_id = fields.String(required=False) channel_id = fields.String(required=False) track_id_list = SplitUniqueListField(fields.String(required=False), data_key="track_id") content_type = SplitUniqueListField(fields.String(required=False)) @validates_schema def validate_data(self, data: dict, *args, **kwargs): id_fields = {"artist_id", "isrc_list", "channel_id", "track_id_list"} if id_fields.isdisjoint(set(data.keys())): raise ValidationError( "Missing at least one identifying parameter from set: artist_id, isrc_list, channel_id, track_id." )