diff --git a/src/igvfd/schemas/changelogs/measurement_set.md b/src/igvfd/schemas/changelogs/measurement_set.md index 00fd7272f5..e3c6907aa9 100644 --- a/src/igvfd/schemas/changelogs/measurement_set.md +++ b/src/igvfd/schemas/changelogs/measurement_set.md @@ -2,6 +2,7 @@ ### Minor changes since schema version 49 +* Update `dbxrefs` regex to add `ENCODE` as a namespace. * Extend `preferred_assay_titles` enum list to include `Parse TAP-seq`. ### Schema version 49 diff --git a/src/igvfd/schemas/changelogs/sequence_file.md b/src/igvfd/schemas/changelogs/sequence_file.md index a89a93e9f5..2d4711fd08 100644 --- a/src/igvfd/schemas/changelogs/sequence_file.md +++ b/src/igvfd/schemas/changelogs/sequence_file.md @@ -2,6 +2,7 @@ ### Minor changes since schema version 16 +* Update `dbxrefs` regex to add `ENCODE` as a namespace. * Extend `collections` enum list to include `Cross-Disorder CNVs`. * Extend `collections` enum list to include `Coronary Artery Disease`. * Extend `collections` enum list to include `PD single cell multiomics`. diff --git a/src/igvfd/schemas/measurement_set.json b/src/igvfd/schemas/measurement_set.json index d087694687..242596136e 100644 --- a/src/igvfd/schemas/measurement_set.json +++ b/src/igvfd/schemas/measurement_set.json @@ -432,6 +432,19 @@ "appscript": "10X Chromium Single Cell 5 prime v3", "igvf_utils": "10X Chromium Single Cell 5 prime v3" } + }, + "dbxrefs": { + "comment": "Supported external resources include: GEO, MaveDB, ENCODE.", + "items": { + "title": "External identifier", + "description": "Identifier from an external resource that may have 1-to-1 or 1-to-many relationships with IGVF file sets.", + "type": "string", + "pattern": "^(GEO:GSE\\d+|urn:mavedb:\\d{8}-[0a-z]+-\\d+|ENCODE:ENCSR\\d{3}[A-Z]{3})$" + }, + "submissionExample": { + "appscript": "[\"GEO:GSE5169185\", \"urn:mavedb:00001250-a-1\", \"ENCODE:ENCSR000AAA\"]", + "igvf_utils": "GEO:GSE5169185, urn:mavedb:00001250-a-1, ENCODE:ENCSR000AAA" + } } }, "fuzzy_searchable_fields": [ diff --git a/src/igvfd/schemas/sequence_file.json b/src/igvfd/schemas/sequence_file.json index 9dc92f4f88..347b3069ac 100644 --- a/src/igvfd/schemas/sequence_file.json +++ b/src/igvfd/schemas/sequence_file.json @@ -176,17 +176,17 @@ } }, "dbxrefs": { - "comment": "Supported external resources include: Sequence Read Archive (SRA).", + "comment": "Supported external resources include: Sequence Read Archive (SRA), ENCODE.", "items": { "title": "External identifier", "description": "Identifier from an external resource that may have 1-to-1 or 1-to-many relationships with IGVF file objects.", "type": "string", "minItems": 1, - "pattern": "^(SRA:(SRR|SRX)\\d+)$" + "pattern": "^(SRA:(SRR|SRX)\\d+|ENCODE:ENCFF\\d{3}[A-Z]{3})$" }, "submissionExample": { - "appscript": "[\"SRA:SRR1234\", \"SRA:SRX1234\"]", - "igvf_utils": "SRA:SRR1234, SRA:SRX1234" + "appscript": "[\"SRA:SRR1234\", \"SRA:SRX1234\", \"ENCODE:ENCFF000AAA\"]", + "igvf_utils": "SRA:SRR1234, SRA:SRX1234, ENCODE:ENCFF000AAA" } }, "flowcell_id": { diff --git a/src/igvfd/tests/data/inserts/measurement_set.json b/src/igvfd/tests/data/inserts/measurement_set.json index 2a9f66f681..83842b5d4b 100644 --- a/src/igvfd/tests/data/inserts/measurement_set.json +++ b/src/igvfd/tests/data/inserts/measurement_set.json @@ -24,7 +24,8 @@ "https://www.protocols.io/private/test-protocols-url-12345" ], "dbxrefs": [ - "GEO:GSE187549" + "GEO:GSE187549", + "ENCODE:ENCSR000AAA" ], "auxiliary_sets": [ "IGVFDS0001AUXI" diff --git a/src/igvfd/tests/data/inserts/sequence_file.json b/src/igvfd/tests/data/inserts/sequence_file.json index 18d566ab62..bc210d918c 100644 --- a/src/igvfd/tests/data/inserts/sequence_file.json +++ b/src/igvfd/tests/data/inserts/sequence_file.json @@ -48,7 +48,8 @@ "file_size": 23940124, "upload_status": "validated", "dbxrefs": [ - "SRA:SRR0000015" + "SRA:SRR0000015", + "ENCODE:ENCFF000AAA" ], "file_set": "igvf:basic_analysis_set", "sequencing_run": 12, diff --git a/src/igvfd/tests/test_schema_measurement_set.py b/src/igvfd/tests/test_schema_measurement_set.py index 3c658dde4c..051bb42b69 100644 --- a/src/igvfd/tests/test_schema_measurement_set.py +++ b/src/igvfd/tests/test_schema_measurement_set.py @@ -18,3 +18,23 @@ def test_measurement_set_protocols_regex(measurement_set, testapp): measurement_set['@id'], {'protocols': ['https://www.protocols.io/view/123/ABC']}) assert res.status_code == 200 + + +def test_measurement_set_dbxrefs_regex(measurement_set, testapp): + res = testapp.patch_json( + measurement_set['@id'], + {'dbxrefs': ['not_a_valid_dbxref']}, + expect_errors=True + ) + assert res.status_code == 422 + res = testapp.patch_json( + measurement_set['@id'], + {'dbxrefs': ['ENCODE:ENCFF000AAA']}, + expect_errors=True + ) + assert res.status_code == 422 + res = testapp.patch_json( + measurement_set['@id'], + {'dbxrefs': ['GEO:GSE187549', 'urn:mavedb:00001250-a-1', 'ENCODE:ENCSR000AAA']} + ) + assert res.status_code == 200 diff --git a/src/igvfd/tests/test_schema_sequence_file.py b/src/igvfd/tests/test_schema_sequence_file.py index b558876e50..db97375e8d 100644 --- a/src/igvfd/tests/test_schema_sequence_file.py +++ b/src/igvfd/tests/test_schema_sequence_file.py @@ -85,6 +85,19 @@ def test_sequence_file_dbxrefs_regex(testapp, sequence_file): ) assert res.status_code == 200 + res = testapp.patch_json( + sequence_file['@id'], + {'dbxrefs': ['ENCODE:ENCSR000AAA']}, + expect_errors=True + ) + assert res.status_code == 422 + + res = testapp.patch_json( + sequence_file['@id'], + {'dbxrefs': ['ENCODE:ENCFF000AAA']} + ) + assert res.status_code == 200 + def test_sequence_file_sequencing_run_uniqueness( testapp,