Skip to content

Commit 7e207a8

Browse files
author
Anton Khodak
committed
Generate the same document for a previously packed tool
1 parent 7457766 commit 7e207a8

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

cwltool/pack.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,12 @@ def replace_refs(d, rewrite, stem, newstem):
6464
if v in rewrite:
6565
d[s] = rewrite[v]
6666
elif v.startswith(stem):
67-
d[s] = newstem + v[len(stem):]
67+
id_ = v[len(stem):]
68+
# prevent appending newstems if tool is already packed
69+
if id_.startswith(newstem.strip("#")):
70+
d[s] = "#" + id_
71+
else:
72+
d[s] = newstem + id_
6873
replace_refs(v, rewrite, stem, newstem)
6974

7075
def import_embed(d, seen):

tests/test_pack.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,25 @@ def test_pack_missing_cwlVersion(self):
6060
packed = json.loads(print_pack(document_loader, processobj, uri, metadata))
6161

6262
self.assertEqual('v1.0', packed["cwlVersion"])
63+
64+
def test_pack_idempotence_tool(self):
65+
"""Test to ensure that pack produces exactly the same document for
66+
an already packed document"""
67+
68+
# Testing single tool
69+
self._pack_idempotently("tests/wf/null-expression1-tool.cwl")
70+
71+
def _pack_idempotently(self, document):
72+
self.maxDiff = None
73+
document_loader, workflowobj, uri = fetch_document(
74+
get_data(document))
75+
document_loader, avsc_names, processobj, metadata, uri = validate_document(
76+
document_loader, workflowobj, uri)
77+
# generate pack output dict
78+
packed = json.loads(print_pack(document_loader, processobj, uri, metadata))
79+
80+
document_loader, workflowobj, uri2 = fetch_document(packed)
81+
document_loader, avsc_names, processobj, metadata, uri2 = validate_document(
82+
document_loader, workflowobj, uri)
83+
double_packed = json.loads(print_pack(document_loader, processobj, uri, metadata))
84+
self.assertEqual(packed, double_packed)

0 commit comments

Comments
 (0)