Skip to content

Commit 4c62c83

Browse files
authored
Improve handling of no-op and invalid downgrade cases (#94)
* Improve handling of no-op and invalid downgrade cases * Make mypy happy & run make format * make format
1 parent df84c39 commit 4c62c83

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

cwlupgrader/main.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ def run(args: argparse.Namespace) -> int:
9393
target_version=target_version,
9494
imports=imports,
9595
)
96-
write_cwl_document(upgraded_document, Path(path).name, args.dir)
96+
if upgraded_document is not None:
97+
write_cwl_document(upgraded_document, Path(path).name, args.dir)
9798
return 0
9899

99100

@@ -109,7 +110,11 @@ def upgrade_document(
109110
if target_version not in supported_versions:
110111
_logger.error(f"Unsupported target cwlVersion: {target_version}")
111112
return
113+
112114
version = document["cwlVersion"]
115+
main_updater = None
116+
inner_updater = None
117+
113118
if version == "cwl:draft-3" or version == "draft-3":
114119
if target_version == "v1.0":
115120
main_updater = draft3_to_v1_0
@@ -123,11 +128,9 @@ def upgrade_document(
123128
elif target_version == "latest":
124129
main_updater = draft3_to_v1_2
125130
inner_updater = _draft3_to_v1_2
126-
else:
127-
pass # does not happen
128131
elif version == "v1.0":
129132
if target_version == "v1.0":
130-
_logger.info("Skipping v1.0 document as requested.")
133+
_logger.info("Not upgrading v1.0 document as requested.")
131134
return
132135
elif target_version == "v1.1":
133136
main_updater = v1_0_to_v1_1
@@ -138,22 +141,30 @@ def upgrade_document(
138141
elif target_version == "latest":
139142
main_updater = v1_0_to_v1_2
140143
inner_updater = _v1_0_to_v1_2
141-
else:
142-
pass # does not happen
143144
elif version == "v1.1":
144145
if target_version == "v1.1":
145-
_logger.info("Skipping v1.1 document as requested.")
146+
_logger.info("Not upgrading v1.1 document as requested.")
146147
return
147148
elif target_version == "v1.2":
148149
main_updater = v1_1_to_v1_2
149150
inner_updater = _v1_1_to_v1_2
150151
elif target_version == "latest":
151152
main_updater = v1_1_to_v1_2
152153
inner_updater = _v1_1_to_v1_2
153-
else:
154-
pass # does not happen? How to do the case that base version is v1.0?
154+
elif version == "v1.2":
155+
if target_version == "v1.2":
156+
_logger.info("Not upgrading v1.2 document as requested.")
157+
return
158+
elif target_version == "latest":
159+
return
155160
else:
156-
_logger.error(f"Unsupported cwlVersion: {version}")
161+
_logger.error(f"Unknown cwlVersion in source document: {version}")
162+
return
163+
164+
if main_updater is None or inner_updater is None:
165+
_logger.error(f"Cannot downgrade from cwlVersion {version} to {target_version}")
166+
return
167+
157168
process_imports(document, imports, inner_updater, output_dir)
158169
return main_updater(document, output_dir)
159170

tests/test_complete.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ def test_v1_1_to_v1_2(tmp_path: Path) -> None:
7575

7676
def test_packed_graph(tmp_path: Path) -> None:
7777
"""Test packed document with $graph."""
78-
main([f"--dir={tmp_path}", "--v1.1-only", get_data("testdata/v1.0/conflict-wf.cwl")])
78+
main(
79+
[f"--dir={tmp_path}", "--v1.1-only", get_data("testdata/v1.0/conflict-wf.cwl")]
80+
)
7981
assert filecmp.cmp(
8082
get_data("testdata/v1.1/conflict-wf.cwl"),
8183
tmp_path / "conflict-wf.cwl",

0 commit comments

Comments
 (0)