from marshmallow import validate from typing import Type from apollo_utils.core.utils.ext_enum import ExtEnum from apollo_utils.service.schemas.fields.enum import EnumField, EnumListField def get_dsp_mixin( enum: Type[ExtEnum], required: bool = False, data_key: str = "dsp", missing: ExtEnum or None = None ) -> type: class Mixin: """Date range validation mixin.""" dsp = EnumField(enum, data_key=data_key, required=required, **({} if required else {"missing": missing})) return Mixin def get_dsp_list_mixin(enum: Type[ExtEnum], required: bool = False, as_enum: bool = True) -> type: class DSPListParam: """Date range validation mixin.""" dsp_list = EnumListField( enum, allow_all=True, as_enum=as_enum, unify=True, data_key="dsp", validate=(validate.Length(min=1, max=10) if required else None), required=required, ) return DSPListParam