Skip to content

Commit 6d0e7bd

Browse files
committed
Deepcopy imported workflows to avoid re-parsing conflict
1 parent 270675e commit 6d0e7bd

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

cwltool/update.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import json
44
import re
55
import traceback
6+
from copy import deepcopy
67

78
from schema_salad.ref_resolver import Loader
89
import schema_salad.validate
@@ -326,9 +327,6 @@ def _draft3toDraft4dev1(doc, loader, baseuri):
326327
# type: (Any, Loader, str) -> Any
327328
if isinstance(doc, dict):
328329
if "class" in doc and doc["class"] == "Workflow":
329-
if 'parsed' in doc:
330-
del doc['parsed']
331-
return doc
332330

333331
def fixup(f): # type: (str) -> str
334332
doc, frg = urlparse.urldefrag(f)
@@ -351,8 +349,9 @@ def fixup(f): # type: (str) -> str
351349
step["scatter"] = [fixup(s) for s in aslist(step["scatter"])]
352350
for out in doc["outputs"]:
353351
out["source"] = fixup(out["source"])
354-
doc['parsed']=True
355352
for key, value in doc.items():
353+
if key == 'run':
354+
value = deepcopy(value)
356355
doc[key] = _draft3toDraft4dev1(value, loader, baseuri)
357356
elif isinstance(doc, list):
358357
doc = [_draft3toDraft4dev1(item, loader, baseuri) for item in doc]
@@ -368,15 +367,13 @@ def _draft4Dev1toDev2(doc, loader, baseuri):
368367
# type: (Any, Loader, str) -> Any
369368
if isinstance(doc, dict):
370369
if "class" in doc and doc["class"] == "Workflow":
371-
if 'parsed' in doc:
372-
del doc['parsed']
373-
return doc
374370
for out in doc["outputs"]:
375371
out["outputSource"] = out["source"]
376372
del out["source"]
377373
for key, value in doc.items():
374+
if key == 'run':
375+
value = deepcopy(value)
378376
doc[key] = _draft4Dev1toDev2(value, loader, baseuri)
379-
doc['parsed']=True
380377
elif isinstance(doc, list):
381378
doc = [_draft4Dev1toDev2(item, loader, baseuri) for item in doc]
382379

0 commit comments

Comments
 (0)