"""Performer Validator functions.""" from backend.constants import error from backend.constants import performer as pfmr_const from backend.utils.validation import format_error def validate_performers_complete(tuid, performers): """Run all validators for a set of track performers. Args: tuid (int): Unique id of track performers (list): List of performers to update track with Returns: dict """ error_obj = ( validate_primary_performers(performers) or validate_performers_type(performers) or validate_performers_birth_name(performers)) if error_obj: error_obj['tuid'] = tuid return error_obj def validate_primary_performers(performers): """Verify primary performers are filled in. Args: performers (list): List of performers to update track with Returns: dict """ error_obj = {} for performer in performers: if performer['type'] == 'primary': return error_obj error_obj['performers'] = format_error( validator=error.REQUIRED_CODE, message=error.NO_PRIMARY_PERFORMER_MSG, error_code=error.MISSING_PRIMARY_PERFORMER ) return error_obj def validate_performers_type(performers): """Validate all performer types are valid. Args: performers (list): List of performers to update track with Returns: dict """ error_obj = {} for performer in performers: if performer.get('type', '') \ not in pfmr_const.PERFORMER_TYPES: error_obj['performers'] = format_error( validator=error.INVALID_CODE, message='Invalid performer type', error_code=error.INVALID_PERFORMER_TYPE ) break return error_obj def validate_performers_birth_name(performers): """Validate all performer birth names are filled in. Args: performers (list): List of performers to update track with Returns: dict """ error_obj = {} for performer in performers: birth_name = (performer.get('birth_name') or '').strip() if not birth_name: error_obj['performers'] = format_error( validator=error.REQUIRED_CODE, message='Birth name is required', error_code=error.MISSING_BIRTH_NAME ) break return error_obj