Skip to content

Commit a5d65f2

Browse files
authored
Fix #77: Unify v1*_only parameter into target_version (#79)
1 parent 4fa21a6 commit a5d65f2

File tree

5 files changed

+111
-12
lines changed

5 files changed

+111
-12
lines changed

cwlupgrader/main.py

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,43 +76,78 @@ def run(args: argparse.Namespace) -> int:
7676
if args.v1_1_only:
7777
_logger.info("Skipping v1.1 document as requested: %s.", path)
7878
continue
79+
80+
if args.v1_only:
81+
target_version = "v1.0"
82+
elif args.v1_1_only:
83+
target_version = "v1.1"
84+
else:
85+
target_version = "latest"
7986
upgraded_document = upgrade_document(
80-
document, args.v1_only, args.v1_1_only, args.dir, imports
87+
document,
88+
args.dir,
89+
target_version=target_version,
90+
imports=imports,
8191
)
8292
write_cwl_document(upgraded_document, Path(path).name, args.dir)
8393
return 0
8494

8595

8696
def upgrade_document(
87-
document: Any, v1_only: bool, v1_1_only: bool, output_dir: str, imports: Set[str]
97+
document: Any,
98+
output_dir: str,
99+
target_version: Optional[str] = "latest",
100+
imports: Optional[Set[str]] = None,
88101
) -> Any:
102+
if imports is None:
103+
imports = set()
104+
supported_versions = ["v1.0", "v1.1", "v1.2", "latest"]
105+
if target_version not in supported_versions:
106+
_logger.error(f"Unsupported target cwlVersion: {target_version}")
107+
return
89108
version = document["cwlVersion"]
90109
if version == "cwl:draft-3" or version == "draft-3":
91-
if v1_only:
110+
if target_version == "v1.0":
92111
main_updater = draft3_to_v1_0
93112
inner_updater = _draft3_to_v1_0
94-
elif v1_1_only:
113+
elif target_version == "v1.1":
95114
main_updater = draft3_to_v1_1
96115
inner_updater = _draft3_to_v1_1
97-
else:
116+
elif target_version == "v1.2":
98117
main_updater = draft3_to_v1_2
99118
inner_updater = _draft3_to_v1_2
119+
elif target_version == "latest":
120+
main_updater = draft3_to_v1_2
121+
inner_updater = _draft3_to_v1_2
122+
else:
123+
pass # does not happen
100124
elif version == "v1.0":
101-
if v1_only:
125+
if target_version == "v1.0":
102126
_logger.info("Skipping v1.0 document as requested.")
103127
return
104-
elif v1_1_only:
128+
elif target_version == "v1.1":
105129
main_updater = v1_0_to_v1_1
106130
inner_updater = _v1_0_to_v1_1
107-
else:
131+
elif target_version == "v1.2":
132+
main_updater = v1_0_to_v1_2
133+
inner_updater = _v1_0_to_v1_2
134+
elif target_version == "latest":
108135
main_updater = v1_0_to_v1_2
109136
inner_updater = _v1_0_to_v1_2
137+
else:
138+
pass # does not happen
110139
elif version == "v1.1":
111-
if v1_1_only:
140+
if target_version == "v1.1":
112141
_logger.info("Skipping v1.1 document as requested.")
113142
return
114-
main_updater = v1_1_to_v1_2
115-
inner_updater = _v1_1_to_v1_2
143+
elif target_version == "v1.2":
144+
main_updater = v1_1_to_v1_2
145+
inner_updater = _v1_1_to_v1_2
146+
elif target_version == "latest":
147+
main_updater = v1_1_to_v1_2
148+
inner_updater = _v1_1_to_v1_2
149+
else:
150+
pass # does not happen? How to do the case that base version is v1.0?
116151
else:
117152
_logger.error(f"Unsupported cwlVersion: {version}")
118153
process_imports(document, imports, inner_updater, output_dir)

testdata/v1.0/listing_deep1.cwl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/env cwl-runner
2+
class: CommandLineTool
3+
cwlVersion: v1.0
4+
requirements:
5+
InlineJavascriptRequirement: {}
6+
inputs:
7+
d: Directory
8+
outputs:
9+
out:
10+
type: boolean
11+
outputBinding:
12+
outputEval: '$(inputs.d.listing.length === 1 && inputs.d.listing[0].listing.length === 1)'
13+
baseCommand: "true"

testdata/v1.1/listing_deep1.cwl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env cwl-runner
2+
class: CommandLineTool
3+
cwlVersion: v1.1
4+
requirements:
5+
LoadListingRequirement:
6+
loadListing: deep_listing
7+
InlineJavascriptRequirement: {}
8+
inputs:
9+
d: Directory
10+
outputs:
11+
out:
12+
type: boolean
13+
outputBinding:
14+
outputEval: '$(inputs.d.listing.length === 1 && inputs.d.listing[0].listing.length === 1)'
15+
baseCommand: "true"

testdata/v1.2/listing_deep1.cwl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env cwl-runner
2+
class: CommandLineTool
3+
cwlVersion: v1.2
4+
requirements:
5+
LoadListingRequirement:
6+
loadListing: deep_listing
7+
InlineJavascriptRequirement: {}
8+
inputs:
9+
d: Directory
10+
outputs:
11+
out:
12+
type: boolean
13+
outputBinding:
14+
outputEval: '$(inputs.d.listing.length === 1 && inputs.d.listing[0].listing.length === 1)'
15+
baseCommand: "true"

tests/test_complete.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import filecmp
22
from pathlib import Path
33

4-
from cwlupgrader.main import main
4+
from cwlupgrader.main import load_cwl_document, main, upgrade_document
55

66
from .util import get_data
77

@@ -15,3 +15,24 @@ def test_draft3_workflow(tmp_path: Path) -> None:
1515
shallow=False,
1616
)
1717
assert result
18+
19+
20+
def test_invalid_target(tmp_path: Path) -> None:
21+
"""Test for invalid target version"""
22+
doc = load_cwl_document(get_data("testdata/v1.0/listing_deep1.cwl"))
23+
result = upgrade_document(doc, str(tmp_path), "invalid-version")
24+
assert result is None
25+
26+
27+
def test_v1_0_to_v1_1(tmp_path: Path) -> None:
28+
"""Basic CWL v1.0 to CWL v1.1 test."""
29+
doc = load_cwl_document(get_data("testdata/v1.0/listing_deep1.cwl"))
30+
upgraded = upgrade_document(doc, str(tmp_path), "v1.1")
31+
assert doc == upgraded
32+
33+
34+
def test_v1_1_to_v1_2(tmp_path: Path) -> None:
35+
"""Basic CWL v1.1 to CWL v1.2 test."""
36+
doc = load_cwl_document(get_data("testdata/v1.1/listing_deep1.cwl"))
37+
upgraded = upgrade_document(doc, str(tmp_path), "v1.2")
38+
assert doc == upgraded

0 commit comments

Comments
 (0)