logger = logging.getLogger('arvados.cwl-runner')
metrics = logging.getLogger('arvados.cwl-runner.metrics')
-def upload_workflow(arvRunner, tool, job_order, project_uuid, update_uuid):
+def upload_workflow(arvRunner, tool, job_order, project_uuid, uuid=None):
upload_docker(arvRunner, tool)
document_loader, workflowobj, uri = (tool.doc_loader, tool.doc_loader.fetch(tool.tool["id"]), tool.tool["id"])
body = {
"workflow": {
- "owner_uuid": project_uuid,
"name": tool.tool.get("label", name),
"description": tool.tool.get("doc", ""),
"definition":yaml.safe_dump(packed)
}}
+ if project_uuid:
+ body["workflow"]["owner_uuid"] = project_uuid
- if update_uuid:
- return arvRunner.api.workflows().update(uuid=update_uuid, body=body).execute(num_retries=arvRunner.num_retries)["uuid"]
+ if uuid:
+ call = arvRunner.api.workflows().update(uuid=uuid, body=body)
else:
- return arvRunner.api.workflows().create(body=body).execute(num_retries=arvRunner.num_retries)["uuid"]
+ call = arvRunner.api.workflows().create(body=body)
+ return call.execute(num_retries=arvRunner.num_retries)["uuid"]
class ArvadosWorkflow(Workflow):
"""Wrap cwltool Workflow to override selected methods."""
joborder_keepmount = copy.deepcopy(joborder)
def keepmount(obj):
+ if "location" not in obj:
+ raise WorkflowException("%s object is missing required 'location' field: %s" % (obj["class"], obj))
if obj["location"].startswith("keep:"):
obj["location"] = "/keep/" + obj["location"][5:]
if "listing" in obj: