Skip to content

Commit 9e3e720

Browse files
authored
Ensure that rewrite_out option of pack returns all identifier rewrites. (#738)
* Ensure that rewrite_out option of pack returns all identifier rewrites. * Add test that rewrite_out includes all identifiers.
1 parent ff21e93 commit 9e3e720

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed

cwltool/pack.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def replace_refs(d, rewrite, stem, newstem):
5858
d[s] = rewrite[v]
5959
elif v.startswith(stem):
6060
d[s] = newstem + v[len(stem):]
61+
rewrite[v] = d[s]
6162
else:
6263
replace_refs(v, rewrite, stem, newstem)
6364
elif isinstance(d, dict):
@@ -72,6 +73,7 @@ def replace_refs(d, rewrite, stem, newstem):
7273
d[s] = "#" + id_
7374
else:
7475
d[s] = newstem + id_
76+
rewrite[v] = d[s]
7577
replace_refs(v, rewrite, stem, newstem)
7678

7779
def import_embed(d, seen):
@@ -182,7 +184,7 @@ def rewrite_id(r, mainuri):
182184
if schemas:
183185
packed["$schemas"] = list(schemas)
184186

185-
for r in rewrite:
187+
for r in list(rewrite.keys()):
186188
v = rewrite[r]
187189
replace_refs(packed, rewrite, r + "/" if "#" in r else r + "#", v + "/")
188190

tests/test_pack.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ def test_pack(self):
4343

4444
self.assertEqual(expect_packed, packed)
4545

46+
47+
def test_pack_rewrites(self):
48+
load_tool.loaders = {}
49+
50+
document_loader, workflowobj, uri = fetch_document(get_data("tests/wf/default-wf5.cwl"))
51+
document_loader, avsc_names, processobj, metadata, uri = validate_document(
52+
document_loader, workflowobj, uri)
53+
rewrites = {}
54+
packed = cwltool.pack.pack(document_loader, processobj, uri, metadata, rewrite_out=rewrites)
55+
self.assertEqual(6, len(rewrites))
56+
4657
def test_pack_missing_cwlVersion(self):
4758
"""Test to ensure the generated pack output is not missing
4859
the `cwlVersion` in case of single tool workflow and single step workflow"""

tests/wf/default-dir5.cwl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
cwlVersion: v1.0
2+
class: Workflow
3+
inputs: []
4+
outputs: []
5+
$namespaces:
6+
arv: "http://arvados.org/cwl#"
7+
steps:
8+
step1:
9+
in: []
10+
out: []
11+
run:
12+
id: stepid
13+
class: CommandLineTool
14+
inputs:
15+
inp2:
16+
type: Directory
17+
default:
18+
class: Directory
19+
location: inp1
20+
outputs: []
21+
arguments: [echo, $(inputs.inp2)]

tests/wf/default-wf5.cwl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
cwlVersion: v1.0
2+
class: Workflow
3+
inputs: []
4+
outputs: []
5+
$namespaces:
6+
arv: "http://arvados.org/cwl#"
7+
requirements:
8+
SubworkflowFeatureRequirement: {}
9+
steps:
10+
step1:
11+
in: []
12+
out: []
13+
run: default-dir5.cwl

0 commit comments

Comments
 (0)