From ea416a82847429ca9842e722b662e0d93b67b685 Mon Sep 17 00:00:00 2001 From: WilsonnnTan Date: Tue, 10 Feb 2026 00:36:34 +0700 Subject: [PATCH 1/3] fix: dbgap accession parser --- gen3/external/nih/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gen3/external/nih/utils.py b/gen3/external/nih/utils.py index e01eb304f..e07cfcc6a 100644 --- a/gen3/external/nih/utils.py +++ b/gen3/external/nih/utils.py @@ -7,8 +7,8 @@ # For more details about this regex, see the function that uses it DBGAP_ACCESSION_REGEX = ( "(?Pphs(?P[0-9]+))" - "(.(?Pp(?P[0-9]+))){0,1}" "(.(?Pv(?P[0-9]+))){0,1}" + "(.(?Pp(?P[0-9]+))){0,1}" "(.(?Pc(?P[0-9]+)+)){0,1}" ) From 1bf2e6261c9552885bef217e580be3014475d541 Mon Sep 17 00:00:00 2001 From: WilsonnnTan Date: Sat, 25 Apr 2026 13:43:01 +0700 Subject: [PATCH 2/3] test: add test cases for get_dbgap_accession_as_parts util --- tests/test_utils.py | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/test_utils.py diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 000000000..c6664ea62 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,66 @@ +import pytest + +from gen3.external.nih.utils import get_dbgap_accession_as_parts + + +@pytest.mark.parametrize("test_input, expected", [ + ( + 'phs000123', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': '', + 'version_number': '', + 'participant_set': '', + 'participant_set_number': '', + 'consent': '', + 'consent_number': '' + } + ), + ( + 'phs000123.p1.c3', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': '', + 'version_number': '', + 'participant_set': 'p1', + 'participant_set_number': '1', + 'consent': 'c3', + 'consent_number': '3' + } + ), + ( + 'phs000123.v3.c3', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': 'v3', + 'version_number': '3', + 'participant_set': '', + 'participant_set_number': '', + 'consent': 'c3', + 'consent_number': '3' + } + ), + ( + 'phs000123.v3.p1.c3', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': 'v3', + 'version_number': '3', + 'participant_set': 'p1', + 'participant_set_number': '1', + 'consent': 'c3', + 'consent_number': '3' + } + ), + +]) +def test_get_dbgap_accession_as_parts(test_input, expected): + """ + Test dbgap accession parsing works and outputs expected fields and values. + """ + + assert get_dbgap_accession_as_parts(test_input) == expected \ No newline at end of file From f95dc069c64cf73cff84ceb2483a2e71c7f428da Mon Sep 17 00:00:00 2001 From: WilsonnnTan Date: Fri, 1 May 2026 00:03:07 +0700 Subject: [PATCH 3/3] test: add test for unexpected order of `v`, `p`, and `c` --- tests/test_utils.py | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index c6664ea62..cea5a94f7 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -56,7 +56,46 @@ 'consent_number': '3' } ), - + # Unexpected order of v, p, and c + ( + 'phs000123.p3.v1.c3', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': '', + 'version_number': '', + 'participant_set': 'p3', + 'participant_set_number': '3', + 'consent': '', + 'consent_number': '' + } + ), + ( + 'phs000123.v3.c1.p3', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': 'v3', + 'version_number': '3', + 'participant_set': '', + 'participant_set_number': '', + 'consent': 'c1', + 'consent_number': '1' + } + ), + ( + 'phs000123.p3.v1', + { + 'phsid': 'phs000123', + 'phsid_number': '000123', + 'version': '', + 'version_number': '', + 'participant_set': 'p3', + 'participant_set_number': '3', + 'consent': '', + 'consent_number': '' + } + ), ]) def test_get_dbgap_accession_as_parts(test_input, expected): """