Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/schema/provenance_schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,10 @@ ENTITIES:
type: json_string
indexed: true
description: "The sample specific metadata derived from the uploaded sample_metadata.tsv file"
before_property_create_validators:
- validate_sample_metadata_disallowed_fields
before_property_update_validators:
- validate_sample_metadata_disallowed_fields
rui_location:
type: json_string
indexed: true
Expand Down
32 changes: 32 additions & 0 deletions src/schema/schema_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,38 @@ def validate_ids_exist_and_datasets(property_key, normalized_entity_type, reques
raise ValueError(f"The following {len(unqualified_uuids_list)} uuids are either not found or not Dataset type: {str(unqualified_uuids_list)}.")


"""
Validate provided data does not include include prohibited fields (e.g. sample_id, source_id)

Parameters
----------
property_key : str
The target property key
normalized_type : str
Submission
request: Flask request object
The instance of Flask request passed in from application request
existing_data_dict : dict
A dictionary that contains all existing entity properties
new_data_dict : dict
The json data in request body, already after the regular validations
"""
def validate_sample_metadata_disallowed_fields(property_key, normalized_entity_type, request, existing_data_dict, new_data_dict):
data = new_data_dict
disallowed_values = ['source_id', 'sample_id']
invalid_entries = []
metadata = data.get('metadata')
if metadata and isinstance(metadata, dict):
metadata_fields = metadata.keys()
normalized_metadata_fields = [f.lower() for f in metadata_fields]
for field in normalized_metadata_fields:
if field in disallowed_values:
invalid_entries.append(field)
if len(invalid_entries) > 0:
raise ValueError(f'Disallowed field(s) inside Sample.metadata: {", ".join(invalid_entries)}')



"""
Validate that a given dataset is not a component of a multi-assay split parent dataset fore allowing status to be
updated. If a component dataset needs to be updated, update it via its parent multi-assay dataset
Expand Down
Loading