from marshmallow import fields, validate from apollo_utils.core.constants.dsp import DSP_SPOTIFY_APPLE_AMAZON from apollo_utils.core.legacy.constants.core import VENDORS from apollo_utils.service.schemas.fields.list import SplitUniqueListField class VendorRequiredMixin: vendor = fields.String(validate=validate.OneOf(VENDORS), required=True) class VendorIdsMixin: spotify_id = fields.String(validate=validate.Length(min=1, max=100)) apple_id = fields.Integer(validate=validate.Range(min=1)) class RequiredAllVendorMixin: """Vendor including Amazon mixin.""" vendor = fields.Str(validate=validate.OneOf(DSP_SPOTIFY_APPLE_AMAZON.values()), required=True) class AllVendorMixin: """Vendor including Amazon mixin.""" vendor = fields.Str(validate=validate.OneOf(DSP_SPOTIFY_APPLE_AMAZON.values()), missing=None) class VendorMixin: """Vendor mixin.""" vendor = fields.Str(validate=validate.OneOf(VENDORS), missing=None) class PerVendorMixin: """Per vendor field mixin.""" per_vendors = fields.Boolean(default=False, missing=False, description="Display detailed per vendors response.") class MultipleVendorsMixin: """Mixin with comma-separated list of vendors.""" vendors = SplitUniqueListField( AllVendorMixin.vendor, missing=DSP_SPOTIFY_APPLE_AMAZON.values(), default=DSP_SPOTIFY_APPLE_AMAZON.values())