Skip to content

Commit 4f073bb

Browse files
authored
scandeps handles File and Directory objects directly. (#193)
* Scandeps understands File and Directory objects and handles directories better.
1 parent 63f5e50 commit 4f073bb

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

cwltool/main.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@ def loadref(b, u):
472472

473473
sf = scandeps(
474474
basedir if basedir else uri, obj, set(("$import", "run")),
475-
set(("$include", "$schemas", "path", "location")), loadref)
475+
set(("$include", "$schemas")), loadref)
476476
if sf:
477477
deps["secondaryFiles"] = sf
478478

@@ -491,6 +491,7 @@ def makeRelative(ob):
491491
else:
492492
ob["location"] = os.path.relpath(u, base)
493493
adjustFileObjs(deps, makeRelative)
494+
adjustDirObjs(deps, makeRelative)
494495

495496
stdout.write(json.dumps(deps, indent=4))
496497

cwltool/process.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
import os
32
import json
43
import copy
@@ -626,14 +625,15 @@ def mergedirs(listing):
626625
elif e["class"] == "Directory":
627626
ents[e["basename"]]["listing"].extend(e["listing"])
628627
for e in ents.itervalues():
629-
if e["class"] == "Directory":
628+
if e["class"] == "Directory" and "listing" in e:
630629
e["listing"] = mergedirs(e["listing"])
631630
r.extend(ents.itervalues())
632631
return r
633632

634633
def scandeps(base, doc, reffields, urlfields, loadref):
635634
# type: (Text, Any, Set[Text], Set[Text], Callable[[Text, Text], Any]) -> List[Dict[Text, Text]]
636635
r = [] # type: List[Dict[Text, Text]]
636+
deps = None # type: Dict[Text, Any]
637637
if isinstance(doc, dict):
638638
if "id" in doc:
639639
if doc["id"].startswith("file://"):
@@ -645,6 +645,16 @@ def scandeps(base, doc, reffields, urlfields, loadref):
645645
})
646646
base = df
647647

648+
if doc.get("class") in ("File", "Directory"):
649+
u = doc.get("location", doc.get("path"))
650+
if u:
651+
deps = {
652+
"class": doc["class"],
653+
"location": urlparse.urljoin(base, u)
654+
}
655+
deps = nestdir(base, deps)
656+
r.append(deps)
657+
648658
for k, v in doc.iteritems():
649659
if k in reffields:
650660
for u in aslist(v):
@@ -656,7 +666,7 @@ def scandeps(base, doc, reffields, urlfields, loadref):
656666
deps = {
657667
"class": "File",
658668
"location": subid
659-
} # type: Dict[Text, Any]
669+
}
660670
sf = scandeps(subid, sub, reffields, urlfields, loadref)
661671
if sf:
662672
deps["secondaryFiles"] = sf

0 commit comments

Comments
 (0)