From e3e6414ad355cea7323293e20f87568915eed559 Mon Sep 17 00:00:00 2001 From: Adam Novak Date: Fri, 17 Jan 2025 12:26:33 -0500 Subject: [PATCH] Make tests and code agree on missing version behavior --- src/toil/lib/trs.py | 3 +++ src/toil/test/lib/test_trs.py | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/toil/lib/trs.py b/src/toil/lib/trs.py index 46d601ffc6..3f90f5697a 100644 --- a/src/toil/lib/trs.py +++ b/src/toil/lib/trs.py @@ -106,6 +106,8 @@ def find_workflow(workflow: str, supported_languages: Optional[set[str]] = None) TODO: Needs to handle multi-workflow files if Dockstore can. :raises FileNotFoundError: if the workflow or version doesn't exist. + :raises ValueError: if the version is not specified but cannot be + automatically determined. """ if supported_languages is not None and len(supported_languages) == 0: @@ -172,6 +174,7 @@ def find_workflow(workflow: str, supported_languages: Optional[set[str]] = None) problem_type: type[Exception] = RuntimeError if trs_version is None: problems.append(f"Workflow {workflow} does not specify a version") + problem_type = ValueError elif trs_version not in workflow_versions: problems.append(f"Workflow version {trs_version} from {workflow} does not exist") problem_type = FileNotFoundError diff --git a/src/toil/test/lib/test_trs.py b/src/toil/test/lib/test_trs.py index cc59d2ada2..f6f6428d1b 100644 --- a/src/toil/test/lib/test_trs.py +++ b/src/toil/test/lib/test_trs.py @@ -61,14 +61,26 @@ def test_lookup_from_page_url(self) -> None: self.assertEqual(trs_version, "master") self.assertEqual(language, "WDL") - def test_lookup_from_trs(self) -> None: + def test_lookup_from_trs_with_version(self) -> None: TRS_ID = "#workflow/github.com/dockstore-testing/md5sum-checker" - trs_id, trs_version, language = find_workflow(TRS_ID) + TRS_VERSION = "master" + trs_id, trs_version, language = find_workflow(f"{TRS_ID}:{TRS_VERSION}") self.assertEqual(trs_id, TRS_ID) - self.assertEqual(trs_version, "master") + self.assertEqual(trs_version, TRS_VERSION) self.assertEqual(language, "CWL") + def test_lookup_from_trs_no_version(self) -> None: + TRS_ID = "#workflow/github.com/dockstore-testing/md5sum-checker" + with pytest.raises(ValueError): + # We don't yet have a way to read Dockstore's default version info, + # so it's not safe to apply any default version when multiple + # versions exist. + trs_id, trs_version, language = find_workflow(TRS_ID) + + # TODO: Add a test with a workflow that we know has and will only ever + # have one version, to test version auto-detection in that case. + def test_get(self) -> None: TRS_ID = "#workflow/github.com/dockstore-testing/md5sum-checker" TRS_VERSION = "master"