#!/usr/bin/env python import arvados import arvados_cwl import arvados.collection import arvados.util from cwltool.process import shortname import cwltool.main import logging import os import json from arvados.api import OrderedJsonModel api = arvados.api("v1") try: job_order_object = arvados.current_job()['script_parameters'] print job_order_object for k,v in job_order_object.items(): if arvados.util.keep_locator_pattern.match(v): job_order_object[k] = "file://%s/%s" % (os.environ['TASK_KEEPMOUNT'], v) runner = arvados_cwl.ArvCwlRunner(api_client=arvados.api('v1', model=OrderedJsonModel())) t = cwltool.main.load_tool(job_order_object, False, True, runner.arvMakeTool, True) outputObj = runner.arvExecutor(t, job_order_object, "", None) c = arvados.collection.Collection() with c.open("cwl.output.json", "w") as f: json.dump(outputObj, f, indent=4) api.job_tasks().update(uuid=arvados.current_task()['uuid'], body={ 'output': c.save_new(create_collection_record=False), 'success': True, 'progress':1.0 }).execute() except Exception as e: logging.exception("Unhandled exception") api.job_tasks().update(uuid=arvados.current_task()['uuid'], body={ 'output': None, 'success': False, 'progress':1.0 }).execute()