"""Validation rules for individual cells in the file. Each key in the dictionary maps to a field name in the file. The value is a list of validation functions to apply to the cell value. Each validation function should return None if the value is valid, or a tuple containing an error code and an error message if the value is invalid. The validation functions are defined in the validations/cell_validations.py The validation functions are applied to the cell values in the process_cell() function in the validations/validate.py module. """ import validations.cell_validations as vda from constants.field_constants import ( FORMAT, ALBUM_PRICING_OPTIONS, PERFORMER_TYPES, INCLUDE_EXCLUDE, ITUNES_PREORDER_OPTIONS, OWNERSHIP_TYPES, ) from constants.performer_roles import PERFORMER_ROLES from constants import field_constants as fc # This maps field names in the file to validation functions above CELL_VALIDATION_MAP = { fc.RELEASE_NAME: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.RELEASE_META_LANGUAGE: [ vda.validate_language, vda.validate_blank ], fc.ORCHARD_ARTIST: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.ARTIST_COUNTRY: [ vda.validate_country, vda.validate_blank ], fc.SUBACCOUNT_NAME: [ vda.validate_string, (vda.validate_length, 5), ], fc.ARTIST_URL: [ vda.validate_url, ], fc.RELEASE_ARTISTS_PRIMARY_ARTIST: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.RELEASE_ARTISTS_FEATURINGS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_REMIXERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_PRODUCERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_COMPOSERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_ORCHESTRAS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_ENSEMBLES: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_ARTISTS_CONDUCTORS: [ vda.validate_string, (vda.validate_length, 5), ], fc.RELEASE_DATE: [ vda.validate_date, vda.validate_blank ], fc.SALE_START_DATE: [ vda.validate_date, vda.validate_blank ], fc.ITUNES_PREORDER: [ (vda.validate_constant, ITUNES_PREORDER_OPTIONS), ], fc.ITUNES_PREORDER_DATE: [ vda.validate_date, ], fc.PREORDER_PREVIEW: [ vda.validate_string, (vda.validate_length, 5), ], fc.ALBUM_PRICING: [ vda.validate_string, (vda.validate_constant, ALBUM_PRICING_OPTIONS), vda.validate_blank ], fc.FORMAT_FULL_LENGTH_EP_SINGLE: [ vda.validate_string, (vda.validate_constant, FORMAT), vda.validate_blank ], fc.IMPRINT: [ vda.validate_string, (vda.validate_length, 5), ], fc.GENRE: [ vda.validate_string, vda.validate_genre, vda.validate_blank ], fc.SUB_GENRE: [ vda.validate_string, vda.validate_subgenre, vda.validate_blank ], fc.C_INFORMATION: [ vda.validate_c_line, (vda.validate_length, 5), vda.validate_blank ], fc.P_LINE: [ vda.validate_p_line, (vda.validate_length, 5), vda.validate_blank ], fc.DIGITAL_UPC: [ vda.validate_upc, ], fc.MANUFACTURERS_UPC: [ vda.validate_upc, ], fc.FOLDER_NAME_PROJECT_CODE: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.PRODUCT_CODE: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.RELEASE_VERSION: [ vda.validate_string, (vda.validate_length, 5), ], fc.FILE_NAME: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.VOLUME: [ vda.validate_int, vda.validate_blank ], fc.TRACK_NO: [ vda.validate_int, vda.validate_blank ], fc.TRACK_NAME: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.TRACK_AUDIO_LANGUAGE: [ vda.validate_language, vda.validate_blank ], fc.VERSION: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTIST: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.TRACK_ARTISTS_FEATURINGS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_REMIXERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_PRODUCERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_COMPOSERS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_ORCHESTRAS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_ENSEMBLES: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_ARTISTS_CONDUCTORS: [ vda.validate_string, (vda.validate_length, 5), ], fc.TRACK_PRICING: [ vda.validate_string, (vda.validate_constant, ALBUM_PRICING_OPTIONS), ], fc.EXPLICIT: [ vda.validate_yes_no_clean, vda.validate_blank ], fc.ISRC: [ vda.validate_isrc, ], fc.THIRD_PARTY_PUBLISHER: [ (vda.validate_yes_or_no, True), vda.validate_blank ], fc.P_INFORMATION: [ vda.validate_p_line, (vda.validate_length, 5), vda.validate_blank ], fc.OWNERSHIP_FOR_THIS_SOUND_RECORDING: [ (vda.validate_constant, OWNERSHIP_TYPES), ], fc.COUNTRY_OF_RECORDING: [ vda.validate_country, ], fc.NATIONALITY_OF_ORIGINAL_COPYRIGHT_OWNER: [ vda.validate_country, ], fc.TRACK_LYRICS: [ vda.validate_string, (vda.validate_length, 5), ], fc.SONGWRITERS: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.PUBLISHERS: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.PERFORMER_1_TYPE: [ (vda.validate_constant, PERFORMER_TYPES), vda.validate_blank ], fc.PERFORMER_1_LEGAL_NAME: [ vda.validate_string, (vda.validate_length, 5), vda.validate_blank ], fc.PERFORMER_1_MAIN_ROLE: [ (vda.validate_constant, PERFORMER_ROLES), vda.validate_blank ], fc.PERFORMER_2_TYPE: [ (vda.validate_constant, PERFORMER_TYPES), ], fc.PERFORMER_2_LEGAL_NAME: [ vda.validate_string, (vda.validate_length, 5), ], fc.PERFORMER_2_MAIN_ROLE: [ (vda.validate_constant, PERFORMER_ROLES), ], fc.PERFORMER_3_TYPE: [ (vda.validate_constant, PERFORMER_TYPES), ], fc.PERFORMER_3_LEGAL_NAME: [ vda.validate_string, (vda.validate_length, 5), ], fc.PERFORMER_3_MAIN_ROLE: [ (vda.validate_constant, PERFORMER_ROLES), ], fc.PERFORMER_4_TYPE: [ (vda.validate_constant, PERFORMER_TYPES), ], fc.PERFORMER_4_LEGAL_NAME: [ vda.validate_string, (vda.validate_length, 5), ], fc.PERFORMER_4_MAIN_ROLE: [ (vda.validate_constant, PERFORMER_ROLES), ], fc.PERFORMER_5_TYPE: [ (vda.validate_constant, PERFORMER_TYPES), ], fc.PERFORMER_5_LEGAL_NAME: [ vda.validate_string, (vda.validate_length, 5), ], fc.PERFORMER_5_MAIN_ROLE: [ (vda.validate_constant, PERFORMER_ROLES), ], fc.ONLY_INCLUDE_ONLY_EXCLUDE: [ (vda.validate_constant, INCLUDE_EXCLUDE), (vda.validate_length, 5), ], fc.TERRITORIES_ISO_CODES: [ (vda.validate_country_code_list, '2'), vda.validate_blank, ], fc.ORCHLABELID: [ vda.validate_int, (vda.validate_length, 4), vda.validate_blank ] }