"""Validation schema for request body.""" from assets.constants import field_const from assets.constants.asset_upload_types import ( ALLOWED_UPLOAD_TYPES, AUDIO_UPLOAD_TYPES, IMAGE_UPLOAD_TYPES, ) post_asset_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.ASSET_TYPE: {"type": "string"}, field_const.PRODUCT_ID: {"type": "integer"}, field_const.UPC: {"type": "string", "pattern": "^[0-9]+$"}, field_const.TRACK_UNIQUE_ID: {"type": "integer"}, field_const.FILENAME: {"type": "string"}, field_const.TOKEN: {"type": "string"}, field_const.ORIGINAL_FILENAME: {"type": "string"}, field_const.IS_CORRECTION: {"type": "boolean"}, }, "required": [ field_const.ASSET_TYPE, field_const.PRODUCT_ID, field_const.UPC, field_const.TRACK_UNIQUE_ID, field_const.FILENAME, field_const.TOKEN, ], "optional": [field_const.IS_CORRECTION], "additionalProperties": False, } post_asset_schema_v2 = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "anyOf": [ { "type": "object", "properties": { field_const.PRODUCT_ID: {"type": "integer"}, field_const.UPC: {"type": "string", "pattern": "^[0-9]{6,14}$"}, field_const.TRACK_UNIQUE_ID: {"type": "integer"}, field_const.FILENAME: {"type": "string"}, field_const.ORIGINAL_FILENAME: {"type": "string"}, field_const.IS_CORRECTION: {"type": "boolean"}, }, "required": [ field_const.PRODUCT_ID, field_const.UPC, field_const.TRACK_UNIQUE_ID, field_const.FILENAME, ], "optional": [field_const.IS_CORRECTION], "additionalProperties": False, }, { "type": "object", "properties": { field_const.FILENAME: {"type": "string"}, }, "additionalProperties": False, }, ], } post_asset_status_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.FILENAME: {"type": "string"}, field_const.STATUS: {"type": "string"}, field_const.DESCRIPTION: {"type": "string"}, field_const.MESSAGE: {"type": "object"}, field_const.TIMESTAMP: {"type": "string"}, }, "required": [ field_const.FILENAME, field_const.STATUS, field_const.MESSAGE, field_const.TIMESTAMP, ], "additionalProperties": False, } post_asset_final_status_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.FILENAME: {"type": "string"}, field_const.STATUS: {"type": "string"}, field_const.DESCRIPTION: {"type": "string"}, field_const.MESSAGE: {"type": "object"}, field_const.TIMESTAMP: {"type": "string"}, field_const.FINAL_ASSETS: {"type": "array", "items": {"type": "object"}}, }, "required": [ field_const.FILENAME, field_const.STATUS, field_const.MESSAGE, field_const.TIMESTAMP, ], "optional": [field_const.FINAL_ASSETS, field_const.DESCRIPTION], "additionalProperties": False, } create_asset_upload_schema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Create Asset Upload Schema", "type": "object", "properties": { field_const.PRODUCT_ID: {"type": "integer", "minimum": 1}, field_const.TRACK_UNIQUE_ID: {"type": "integer", "minimum": 0}, field_const.ORIGINAL_FILENAME: {"type": "string"}, field_const.ASSET_UPLOAD_TYPE: { "oneOf": [ {"type": "string", "enum": [*ALLOWED_UPLOAD_TYPES]}, # TODO: CDAM-3825: Once all callers send asset_upload_type, # remove this null branch, add ASSET_UPLOAD_TYPE to the # "required" list, and drop the "required" guard inside each # allOf "if" block. {"type": "null"}, ] }, }, "required": [ field_const.PRODUCT_ID, field_const.TRACK_UNIQUE_ID, field_const.ORIGINAL_FILENAME, ], "additionalProperties": False, # Cross-check asset_upload_type against track_unique_id when the caller # provides an asset_upload_type. Doesn't fire when asset_upload_type is # absent (per CDAM-3825, it's still optional during the client migration). "allOf": [ { "if": { "properties": { field_const.ASSET_UPLOAD_TYPE: {"enum": IMAGE_UPLOAD_TYPES} }, "required": [field_const.ASSET_UPLOAD_TYPE], }, "then": {"properties": {field_const.TRACK_UNIQUE_ID: {"const": 0}}}, }, { "if": { "properties": { field_const.ASSET_UPLOAD_TYPE: {"enum": AUDIO_UPLOAD_TYPES} }, "required": [field_const.ASSET_UPLOAD_TYPE], }, "then": {"properties": {field_const.TRACK_UNIQUE_ID: {"minimum": 1}}}, }, ], } complete_multipart_upload_schema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Complete Multipart Upload Schema", "type": "object", "properties": { field_const.PARTS: { "type": "array", "uniqueItems": True, "minItems": 1, "maxItems": 10000, "items": { "type": "object", "properties": { field_const.PART_NUMBER: { "type": "integer", "minimum": 1, "maximum": 10000, }, field_const.ETAG: { "type": "string", "minLength": 1, }, }, "required": [field_const.PART_NUMBER, field_const.ETAG], "additionalProperties": False, }, } }, "required": [field_const.PARTS], "additionalProperties": False, } get_upload_token_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.DURATION: {"type": "integer"}, field_const.ASSET_TYPE: {"type": "string"}, }, "optional": [field_const.DURATION, field_const.ASSET_TYPE], "additionalProperties": False, } legacy_image_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": {field_const.UPC: {"type": "string", "pattern": "^[0-9]+$"}}, "required": [field_const.UPC], "additionalProperties": False, } asset_properties_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.ASSET_TYPE_ID: {"type": "integer"}, field_const.PHYSYCAL_LOCATION_ID: {"type": "integer"}, field_const.TRACKS: { "type": "array", "minItems": 1, "properties": { field_const.TUID: {"type": "integer"}, field_const.VOLUME_NUMBER: {"type": "integer"}, field_const.TRACK_NUMBER: {"type": "integer"}, }, "required": [ field_const.TUID, field_const.VOLUME_NUMBER, field_const.TRACK_NUMBER, ], }, }, "required": [ field_const.ASSET_TYPE_ID, field_const.PHYSYCAL_LOCATION_ID, field_const.TRACKS, ], "additionalProperties": False, } post_image_location_bulk = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { "entities": { "type": "array", "minItems": 1, "properties": { field_const.PRODUCT_ID: {"type": "integer"}, field_const.UPC: {"type": "string"}, }, "required": [field_const.PRODUCT_ID], "optional": [field_const.UPC], "additionalProperties": False, }, }, "additionalProperties": False, } post_hive_segment_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.ASSET_FINAL_ID: {"type": "integer"}, field_const.SEGMENTS: { "type": "array", "minItems": 1, "items": { "type": "object", "properties": { field_const.TIME: {"type": "integer"}, field_const.AI_GENERATED_MUSIC: {"type": "number"}, field_const.AI_GENERATED_MUSIC_VOCAL: {"type": "number"}, field_const.MUBERT: {"type": "number"}, field_const.MUSICGEN: {"type": "number"}, field_const.RIFFUSION: {"type": "number"}, field_const.STABLE_AUDIO: {"type": "number"}, field_const.SUNO: {"type": "number"}, field_const.UDIO: {"type": "number"}, field_const.YUE: {"type": "number"}, field_const.MINIMAX: {"type": "number"}, field_const.MUREKA: {"type": "number"}, field_const.ACE_STEP: {"type": "number"}, field_const.DUOBAO: {"type": "number"}, field_const.GOOGLE: {"type": "number"}, field_const.HEARTMULA: {"type": "number"}, field_const.LOUDLY: {"type": "number"}, }, "required": [ field_const.TIME, field_const.AI_GENERATED_MUSIC, field_const.AI_GENERATED_MUSIC_VOCAL, ], "additionalProperties": False, }, }, field_const.OVERWRITE: {"type": "boolean"}, }, "required": [field_const.ASSET_FINAL_ID, field_const.TASK, field_const.SEGMENTS], "additionalProperties": True, } post_hive_text_recognition_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.ASSET_FINAL_ID: {"type": "integer"}, field_const.BLOCK_TEXT: {"type": "string"}, }, "required": [field_const.ASSET_FINAL_ID, field_const.BLOCK_TEXT], "additionalProperties": True, } post_hive_ai_image_task_schema = { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Request Body Schema", "type": "object", "properties": { field_const.ASSET_FINAL_ID: {"type": "integer"}, field_const.TASK_ID: {"type": "string"}, field_const.CLASS_NAME: {"type": "string"}, field_const.SCORE_VALUE: {"type": "number"}, }, "required": [ field_const.ASSET_FINAL_ID, field_const.TASK_ID, field_const.CLASS_NAME, field_const.SCORE_VALUE, ], "additionalProperties": False, }