"""Schema for Performers.""" import marshmallow from marshmallow import fields from marshmallow.validate import OneOf from marshmallow.validate import Range from backend.constants import performer as pfmr_const from backend.utils.schema_validator import IsAllPositiveNumbers from backend.utils.schema_validator import IsNotBlankOrWhitespace class PerformerBaseSchema(marshmallow.Schema): """Base Schema used for performer data.""" type = fields.String( # noqa: A003 required=True, validate=[OneOf(pfmr_const.PERFORMER_TYPES)]) birth_name = fields.String( required=False, validate=IsNotBlankOrWhitespace()) performer_role_id = fields.Int(validate=Range(min=1)) @marshmallow.post_load def sanitize_input(self, data): """Clean up and sanitize raw input data. This is done after the data has passed validation. Args: data (dict): Unserialized data Returns: data (dict) """ data['birth_name'] = data['birth_name'].strip() return data class TrackPeformersUpdateSchema(marshmallow.Schema): """Schema used for updating track performer.""" performers = fields.Nested(PerformerBaseSchema, many=True) class TuidListSchema(marshmallow.Schema): """Schema used for track data.""" tuids = fields.String( required=True, validate=IsAllPositiveNumbers())