From c76b4cf514d5ab24f2dbdd20d9643ff0b861f346 Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Mon, 3 Jun 2024 11:31:28 -0700 Subject: [PATCH 1/6] Add required properties to Software Version --- src/igvfd/schemas/software_version.json | 6 +++++- src/igvfd/tests/fixtures/schemas/software.py | 13 +++++++++++++ .../tests/fixtures/schemas/software_version.py | 5 +++++ .../tests/test_upgrade_software_version.py | 11 +++++++++++ src/igvfd/upgrade/software_version.py | 17 +++++++++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/igvfd/schemas/software_version.json b/src/igvfd/schemas/software_version.json index 862ce1c89..9ea6249d7 100644 --- a/src/igvfd/schemas/software_version.json +++ b/src/igvfd/schemas/software_version.json @@ -24,6 +24,10 @@ ] } ], + "required": [ + "software", + "version" + ], "identifyingProperties": [ "uuid", "aliases", @@ -54,7 +58,7 @@ }, "properties": { "schema_version": { - "default": "5" + "default": "6" }, "software": { "title": "Software", diff --git a/src/igvfd/tests/fixtures/schemas/software.py b/src/igvfd/tests/fixtures/schemas/software.py index 3d758f0db..4df652da3 100644 --- a/src/igvfd/tests/fixtures/schemas/software.py +++ b/src/igvfd/tests/fixtures/schemas/software.py @@ -15,6 +15,19 @@ def software(testapp, lab, award): return testapp.post_json('/software', item, status=201).json['@graph'][0] +@pytest.fixture +def software_graphreg(testapp, lab, award): + item = { + 'award': award['@id'], + 'lab': lab['@id'], + 'title': 'Graphreg', + 'name': 'graphreg', + 'description': 'GraphReg (Chromatin interaction aware gene regulatory modeling with graph attention networks) is a graph neural network based gene regulation model.', + 'source_url': 'https://genome.cshlp.org/content/32/5/930.full' + } + return testapp.post_json('/software', item, status=201).json['@graph'][0] + + @pytest.fixture def software_v1(software): item = software.copy() diff --git a/src/igvfd/tests/fixtures/schemas/software_version.py b/src/igvfd/tests/fixtures/schemas/software_version.py index 1cb870398..9ab44df45 100644 --- a/src/igvfd/tests/fixtures/schemas/software_version.py +++ b/src/igvfd/tests/fixtures/schemas/software_version.py @@ -51,3 +51,8 @@ def software_version_v3(software_version_v2): 'description': '', }) return item + + +def software_version_v5(testapp, software, lab, award): + item = {} + return item diff --git a/src/igvfd/tests/test_upgrade_software_version.py b/src/igvfd/tests/test_upgrade_software_version.py index 94e10c98b..e2860c776 100644 --- a/src/igvfd/tests/test_upgrade_software_version.py +++ b/src/igvfd/tests/test_upgrade_software_version.py @@ -30,3 +30,14 @@ def test_software_version_upgrade_3_4(upgrader, software_version_v3): current_version='3', target_version='4') assert value['schema_version'] == '4' assert 'description' not in value + + +def test_software_version_upgrade_5_6(upgrader, software_version_v5): + value = upgrader.upgrade( + 'software_version', software_version_v5, + current_version='5', target_version='6') + assert value['schema_version'] == '6' + assert value['software'] == '/software/graphreg/' + assert value['version'] == 'v1.0.0' + assert value['notes'].endswith( + 'This software version lacked a link to a software and has been upgraded to link to /software/graphreg/ as a placeholder. This software version lacked a version and has been upgraded to v1.0.0 as a placeholder.') diff --git a/src/igvfd/upgrade/software_version.py b/src/igvfd/upgrade/software_version.py index a80e165ba..4d09714c1 100644 --- a/src/igvfd/upgrade/software_version.py +++ b/src/igvfd/upgrade/software_version.py @@ -42,3 +42,20 @@ def software_version_4_5(value, system): notes = value.get('notes', '') notes += f'This object\'s release_timestamp has been set to 2024-03-06T12:34:56Z' value['notes'] = notes.strip() + + +@upgrade_step('software_version', '5', '6') +def software_version_5_6(value, system): + # https://igvf.atlassian.net/browse/IGVF-1686 + software_note = '' + version_note = '' + if 'software' not in value: + value['software'] = '/software/graphreg/' + software_note = 'This software version lacked a link to a software and has been upgraded to link to /software/graphreg/ as a placeholder.' + if 'version' not in value: + value['version'] = 'v1.0.0' + version_note = 'This software version lacked a version and has been upgraded to v1.0.0 as a placeholder.' + merged_note = ' '.join([x for x in [software_note, version_note] if x != '']) + notes = value.get('notes', '') + notes += merged_note + value['notes'] = notes.strip() From f07af04aea2720c9fa0f1367e2fbe11601b19868 Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Mon, 3 Jun 2024 12:45:57 -0700 Subject: [PATCH 2/6] Fix fixture --- src/igvfd/tests/fixtures/schemas/software_version.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/igvfd/tests/fixtures/schemas/software_version.py b/src/igvfd/tests/fixtures/schemas/software_version.py index 9ab44df45..48d9bd07a 100644 --- a/src/igvfd/tests/fixtures/schemas/software_version.py +++ b/src/igvfd/tests/fixtures/schemas/software_version.py @@ -53,6 +53,7 @@ def software_version_v3(software_version_v2): return item -def software_version_v5(testapp, software, lab, award): +@pytest.fixture +def software_version_v5(testapp): item = {} return item From 037c704640c763f448ade6e6f214a0da1f798c0a Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Tue, 4 Jun 2024 09:49:55 -0700 Subject: [PATCH 3/6] Add lab and award required --- src/igvfd/schemas/software_version.json | 2 ++ src/igvfd/tests/test_upgrade_software_version.py | 10 +++++++++- src/igvfd/upgrade/software_version.py | 10 +++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/igvfd/schemas/software_version.json b/src/igvfd/schemas/software_version.json index 9ea6249d7..d71f70e34 100644 --- a/src/igvfd/schemas/software_version.json +++ b/src/igvfd/schemas/software_version.json @@ -25,6 +25,8 @@ } ], "required": [ + "award", + "lab", "software", "version" ], diff --git a/src/igvfd/tests/test_upgrade_software_version.py b/src/igvfd/tests/test_upgrade_software_version.py index e2860c776..099e3c265 100644 --- a/src/igvfd/tests/test_upgrade_software_version.py +++ b/src/igvfd/tests/test_upgrade_software_version.py @@ -40,4 +40,12 @@ def test_software_version_upgrade_5_6(upgrader, software_version_v5): assert value['software'] == '/software/graphreg/' assert value['version'] == 'v1.0.0' assert value['notes'].endswith( - 'This software version lacked a link to a software and has been upgraded to link to /software/graphreg/ as a placeholder. This software version lacked a version and has been upgraded to v1.0.0 as a placeholder.') + 'This software version lacked a link to a software ' + 'and has been upgraded to link to /software/graphreg/ ' + 'as a placeholder. This software version lacked a version ' + 'and has been upgraded to v1.0.0 as a placeholder. This ' + 'software version lacked a lab and has been upgraded to ' + '/labs/j-michael-cherry/ as a placeholder. This software ' + 'version lacked an award and has been upgraded to ' + '/awards/HG012012/ as a placeholder.' + ) diff --git a/src/igvfd/upgrade/software_version.py b/src/igvfd/upgrade/software_version.py index 4d09714c1..0218fcc1c 100644 --- a/src/igvfd/upgrade/software_version.py +++ b/src/igvfd/upgrade/software_version.py @@ -49,13 +49,21 @@ def software_version_5_6(value, system): # https://igvf.atlassian.net/browse/IGVF-1686 software_note = '' version_note = '' + lab_note = '' + award_note = '' if 'software' not in value: value['software'] = '/software/graphreg/' software_note = 'This software version lacked a link to a software and has been upgraded to link to /software/graphreg/ as a placeholder.' if 'version' not in value: value['version'] = 'v1.0.0' version_note = 'This software version lacked a version and has been upgraded to v1.0.0 as a placeholder.' - merged_note = ' '.join([x for x in [software_note, version_note] if x != '']) + if 'lab' not in value: + value['lab'] = '/labs/j-michael-cherry/' + lab_note = 'This software version lacked a lab and has been upgraded to /labs/j-michael-cherry/ as a placeholder.' + if 'award' not in value: + value['award'] = '/awards/HG012012/' + award_note = 'This software version lacked an award and has been upgraded to /awards/HG012012/ as a placeholder.' + merged_note = ' '.join([x for x in [software_note, version_note, lab_note, award_notes] if x != '']) notes = value.get('notes', '') notes += merged_note value['notes'] = notes.strip() From eee9271587110206bd20278225c68319feda8412 Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Tue, 4 Jun 2024 11:56:19 -0700 Subject: [PATCH 4/6] Fix typo --- src/igvfd/upgrade/software_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/igvfd/upgrade/software_version.py b/src/igvfd/upgrade/software_version.py index 0218fcc1c..c649f7554 100644 --- a/src/igvfd/upgrade/software_version.py +++ b/src/igvfd/upgrade/software_version.py @@ -63,7 +63,7 @@ def software_version_5_6(value, system): if 'award' not in value: value['award'] = '/awards/HG012012/' award_note = 'This software version lacked an award and has been upgraded to /awards/HG012012/ as a placeholder.' - merged_note = ' '.join([x for x in [software_note, version_note, lab_note, award_notes] if x != '']) + merged_note = ' '.join([x for x in [software_note, version_note, lab_note, award_note] if x != '']) notes = value.get('notes', '') notes += merged_note value['notes'] = notes.strip() From c87ed8d4dea36750c7d3294d4c86f869a0dcf3b5 Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Wed, 5 Jun 2024 09:54:14 -0700 Subject: [PATCH 5/6] Changelog --- src/igvfd/schemas/changelogs/software_version.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/igvfd/schemas/changelogs/software_version.md b/src/igvfd/schemas/changelogs/software_version.md index a6061fa97..b1a68d8d9 100644 --- a/src/igvfd/schemas/changelogs/software_version.md +++ b/src/igvfd/schemas/changelogs/software_version.md @@ -1,5 +1,12 @@ ## Changelog for *`software_version.json`* +### Schema version 6 + +* Require `award`. +* Require `lab`. +* Require `software`. +* Require `version`. + ### Schema version 5 * Require `release_timestamp` for any objects with `released` or `archived` status. From 47e5cf3348ab4ee9ed22badbcbb61b1188312978 Mon Sep 17 00:00:00 2001 From: Jennifer Jou Date: Fri, 7 Jun 2024 09:44:47 -0700 Subject: [PATCH 6/6] add check for empty notes --- src/igvfd/upgrade/software_version.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/igvfd/upgrade/software_version.py b/src/igvfd/upgrade/software_version.py index c649f7554..c304263a7 100644 --- a/src/igvfd/upgrade/software_version.py +++ b/src/igvfd/upgrade/software_version.py @@ -66,4 +66,5 @@ def software_version_5_6(value, system): merged_note = ' '.join([x for x in [software_note, version_note, lab_note, award_note] if x != '']) notes = value.get('notes', '') notes += merged_note - value['notes'] = notes.strip() + if notes: + value['notes'] = notes.strip()