Skip to content

Commit 121c958

Browse files
authored
Merge branch 'master' into prov_decoupling
2 parents 3b3d3fb + 9867c93 commit 121c958

12 files changed

+197
-146
lines changed

cwltool/builder.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,13 @@ def bind_input(self,
192192
binding = CommentedMap(schema["inputBinding"].items())
193193
assert binding is not None
194194

195+
bp = list(aslist(lead_pos))
195196
if "position" in binding:
196-
binding["position"] = aslist(lead_pos) + aslist(binding["position"]) + aslist(tail_pos)
197+
bp.extend(aslist(binding["position"]))
197198
else:
198-
binding["position"] = aslist(lead_pos) + [0] + aslist(tail_pos)
199+
bp.append(0)
200+
bp.extend(aslist(tail_pos))
201+
binding["position"] = bp
199202

200203
binding["datum"] = datum
201204
if "valueFrom" in binding:

cwltool/executors.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ def execute(self,
7777
runtime_context.workflow_eval_lock = threading.Condition(threading.RLock())
7878

7979
job_reqs = None
80-
if "cwl:requirements" in job_order_object:
81-
job_reqs = job_order_object["cwl:requirements"]
80+
if "https://w3id.org/cwl/cwl#requirements" in job_order_object:
81+
job_reqs = job_order_object["https://w3id.org/cwl/cwl#requirements"]
8282
elif ("cwl:defaults" in process.metadata
83-
and "cwl:requirements" in process.metadata["cwl:defaults"]):
84-
job_reqs = process.metadata["cwl:defaults"]["cwl:requirements"]
83+
and "https://w3id.org/cwl/cwl#requirements"
84+
in process.metadata["cwl:defaults"]):
85+
job_reqs = process.metadata["cwl:defaults"]["https://w3id.org/cwl/cwl#requirements"]
8586
if job_reqs is not None:
8687
for req in job_reqs:
8788
process.requirements.append(req)
@@ -95,7 +96,7 @@ def execute(self,
9596
getdefault(runtime_context.compute_checksum, True),
9697
path_mapper=runtime_context.path_mapper)
9798

98-
if runtime_context.rm_tmpdir is not None:
99+
if runtime_context.rm_tmpdir:
99100
if runtime_context.cachedir is None:
100101
output_dirs = self.output_dirs # type: Iterable[Any]
101102
else:

cwltool/job.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,23 @@
1818

1919
import shellescape
2020
from prov.model import PROV
21-
from schema_salad.sourceline import SourceLine
2221
from six import PY2, with_metaclass
2322
from typing_extensions import (TYPE_CHECKING, # pylint: disable=unused-import
2423
Text)
25-
# move to a regular typing import when Python 3.3-3.6 is no longer supported
24+
from schema_salad.sourceline import SourceLine
2625

2726
from .builder import Builder, HasReqsHints # pylint: disable=unused-import
2827
from .context import RuntimeContext # pylint: disable=unused-import
2928
from .context import getdefault
3029
from .errors import WorkflowException
3130
from .loghandler import _logger
32-
from .pathmapper import (MapperEnt, PathMapper, ensure_writable,
33-
ensure_non_writable)
34-
from .process import UnsupportedRequirement, stageFiles
31+
from .pathmapper import (MapperEnt, PathMapper, # pylint: disable=unused-import
32+
ensure_writable, ensure_non_writable)
33+
from .process import UnsupportedRequirement, stage_files
3534
from .secrets import SecretStore # pylint: disable=unused-import
36-
from .utils import \
37-
bytes2str_in_dicts # pylint: disable=unused-import; pylint: disable=unused-import
38-
from .utils import (DEFAULT_TMP_PREFIX, Directory, copytree_with_merge,
39-
json_dump, json_dumps, onWindows, processes_to_kill,
40-
subprocess)
35+
from .utils import (DEFAULT_TMP_PREFIX, Directory, bytes2str_in_dicts,
36+
copytree_with_merge, json_dump, json_dumps, onWindows,
37+
processes_to_kill, subprocess)
4138

4239
if TYPE_CHECKING:
4340
from .provenance import ProvenanceProfile # pylint: disable=unused-import
@@ -265,7 +262,6 @@ def _execute(self,
265262
else:
266263
stdin_path = rmap[1]
267264

268-
269265
stderr_path = None
270266
if self.stderr is not None:
271267
abserr = os.path.join(self.outdir, self.stderr)
@@ -378,7 +374,7 @@ def _execute(self,
378374
_logger.debug(u"[job %s] Removing input staging directory %s", self.name, self.stagedir)
379375
shutil.rmtree(self.stagedir, True)
380376

381-
if runtimeContext.rm_tmpdir is not None:
377+
if runtimeContext.rm_tmpdir:
382378
_logger.debug(u"[job %s] Removing temporary directory %s", self.name, self.tmpdir)
383379
shutil.rmtree(self.tmpdir, True)
384380

@@ -407,14 +403,17 @@ def run(self,
407403
if "PATH" not in env:
408404
env["PATH"] = str(os.environ["PATH"]) if onWindows() else os.environ["PATH"]
409405
if "SYSTEMROOT" not in env and "SYSTEMROOT" in os.environ:
410-
env["SYSTEMROOT"] = str(os.environ["SYSTEMROOT"]) if onWindows() else os.environ["SYSTEMROOT"]
406+
env["SYSTEMROOT"] = str(os.environ["SYSTEMROOT"]) if onWindows() \
407+
else os.environ["SYSTEMROOT"]
411408

412-
stageFiles(self.pathmapper, ignoreWritable=True, symLink=True, secret_store=runtimeContext.secret_store)
409+
stage_files(self.pathmapper, ignore_writable=True, symlink=True,
410+
secret_store=runtimeContext.secret_store)
413411
if self.generatemapper is not None:
414-
stageFiles(self.generatemapper, ignoreWritable=self.inplace_update,
415-
symLink=True, secret_store=runtimeContext.secret_store)
416-
relink_initialworkdir(self.generatemapper, self.outdir,
417-
self.builder.outdir, inplace_update=self.inplace_update)
412+
stage_files(self.generatemapper, ignore_writable=self.inplace_update,
413+
symlink=True, secret_store=runtimeContext.secret_store)
414+
relink_initialworkdir(
415+
self.generatemapper, self.outdir, self.builder.outdir,
416+
inplace_update=self.inplace_update)
418417

419418
self._execute([], env, runtimeContext)
420419

@@ -478,12 +477,12 @@ def create_file_and_add_volume(self,
478477
volume, # type: MapperEnt
479478
host_outdir_tgt, # type: Optional[Text]
480479
secret_store # type: Optional[SecretStore]
481-
): # type: (...) -> None
480+
): # type: (...) -> Text
482481
"""Create the file and add a mapping."""
483482
if not host_outdir_tgt:
484483
new_file = os.path.join(
485484
tempfile.mkdtemp(dir=self.tmpdir),
486-
os.path.basename(volume.resolved))
485+
os.path.basename(volume.target))
487486
writable = True if volume.type == "CreateWritableFile" else False
488487
if secret_store:
489488
contents = secret_store.retrieve(volume.resolved)
@@ -501,7 +500,7 @@ def create_file_and_add_volume(self,
501500
ensure_writable(host_outdir_tgt or new_file)
502501
else:
503502
ensure_non_writable(host_outdir_tgt or new_file)
504-
503+
return host_outdir_tgt or new_file
505504

506505

507506
def add_volumes(self,
@@ -513,7 +512,7 @@ def add_volumes(self,
513512
"""Append volume mappings to the runtime option list."""
514513

515514
container_outdir = self.builder.outdir
516-
for vol in (itm[1] for itm in pathmapper.items() if itm[1].staged):
515+
for key, vol in (itm for itm in pathmapper.items() if itm[1].staged):
517516
host_outdir_tgt = None # type: Optional[Text]
518517
if vol.target.startswith(container_outdir + "/"):
519518
host_outdir_tgt = os.path.join(
@@ -532,11 +531,12 @@ def add_volumes(self,
532531
self.add_writable_directory_volume(
533532
runtime, vol, host_outdir_tgt)
534533
elif vol.type in ["CreateFile", "CreateWritableFile"]:
535-
self.create_file_and_add_volume(
534+
new_path = self.create_file_and_add_volume(
536535
runtime, vol, host_outdir_tgt, secret_store)
536+
pathmapper.update(
537+
key, new_path, vol.target, vol.type, vol.staged)
537538

538-
def run(self, runtimeContext):
539-
# type: (RuntimeContext) -> None
539+
def run(self, runtimeContext): # type: (RuntimeContext) -> None
540540
if not os.path.exists(self.tmpdir):
541541
os.makedirs(self.tmpdir)
542542
(docker_req, docker_is_req) = self.get_requirement("DockerRequirement")

cwltool/load_tool.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
overrides_ctx = {
4949
u"overrideTarget": {u"@type": u"@id"},
5050
u"cwltool": "http://commonwl.org/cwltool#",
51-
u"overrides": {
51+
u"http://commonwl.org/cwltool#overrides": {
5252
"@id": "cwltool:overrides",
5353
"mapSubject": "overrideTarget",
5454
},
@@ -226,7 +226,7 @@ def validate_document(document_loader, # type: Loader
226226
uri = urllib.parse.urljoin(uri, workflowobj["https://w3id.org/cwl/cwl#tool"])
227227
del cast(dict, jobobj)["https://w3id.org/cwl/cwl#tool"]
228228

229-
if "http://commonwl.org/cwltool#overrides" in jobobj:
229+
if isinstance(jobobj, CommentedMap) and "http://commonwl.org/cwltool#overrides" in jobobj:
230230
overrides.extend(resolve_overrides(jobobj, uri, uri))
231231
del jobobj["http://commonwl.org/cwltool#overrides"]
232232

@@ -272,7 +272,7 @@ def validate_document(document_loader, # type: Loader
272272
if isinstance(avsc_names, Exception):
273273
raise avsc_names
274274

275-
processobj = None # type: Union[CommentedMap, CommentedSeq, Text]
275+
processobj = None # type: Union[CommentedMap, CommentedSeq, Text, None]
276276
document_loader = Loader(sch_document_loader.ctx, schemagraph=sch_document_loader.graph,
277277
idx=document_loader.idx, cache=sch_document_loader.cache,
278278
fetcher_constructor=fetcher_constructor, skip_schemas=skip_schemas)
@@ -285,7 +285,7 @@ def validate_document(document_loader, # type: Loader
285285
if not isinstance(processobj, (CommentedMap, CommentedSeq)):
286286
raise ValidationException("Workflow must be a dict or list.")
287287

288-
if not new_metadata:
288+
if not new_metadata and isinstance(processobj, CommentedMap):
289289
new_metadata = cast(CommentedMap, cmap(
290290
{"$namespaces": processobj.get("$namespaces", {}),
291291
"$schemas": processobj.get("$schemas", []),
@@ -387,7 +387,7 @@ def resolve_overrides(ov, # Type: CommentedMap
387387
raise Exception("Expected CommentedMap, got %s" % type(ret))
388388
cwl_docloader = get_schema("v1.0")[0]
389389
cwl_docloader.resolve_all(ret, ov_uri)
390-
return ret["overrides"]
390+
return ret["http://commonwl.org/cwltool#overrides"]
391391

392392
def load_overrides(ov, base_url): # type: (Text, Text) -> List[Dict[Text, Any]]
393393
ovloader = Loader(overrides_ctx)

0 commit comments

Comments
 (0)