"""Validators.""" import collections from switchboard_consumer.constants.track_type import UNKNOWN from switchboard_consumer.constants.validation import NO_TRACK_TYPE, \ VALIDATION_CODE from switchboard_consumer.logic.validation.track.rules import \ valid_pline, valid_track_sample, valid_track_type def validate_track_type(track_type, isrc): """Validate track type.""" if not valid_track_type(track_type): return { 'code': VALIDATION_CODE, 'message': NO_TRACK_TYPE.format(isrc, track_type) } def validate_track_sample(track_sample, isrc): """Validate track sample.""" track_sample_type = track_sample.get('sampleType', UNKNOWN) if not valid_track_sample(track_sample_type): return { 'code': VALIDATION_CODE, 'message': 'Track with ISRC: {} has ' 'sample with type: {}'.format(isrc, track_sample_type) } def validate_pline(pline): """Validate pline.""" if not valid_pline(pline): return { 'code': VALIDATION_CODE, 'message': 'Invalid pLine: {}'.format(pline) } def validate_track_samples_names_unique(samples): """Validate samples names for uniqueness.""" all_names = [sample['displayTitle'] for sample in samples] duplicates = [item for item, count in collections.Counter(all_names).items() if count > 1] if duplicates: return { 'code': VALIDATION_CODE, 'message': 'Duplicate sample names: {}'.format(duplicates) }