8654: Passes in local testing.
[arvados.git] / crunch_scripts / cwl-runner
1 #!/usr/bin/env python
2
3 import arvados
4 import arvados_cwl
5 import arvados.collection
6 import arvados.util
7 from cwltool.process import shortname
8 import cwltool.main
9 import logging
10 import os
11 import json
12 from arvados.api import OrderedJsonModel
13
14 api = arvados.api("v1")
15
16 try:
17     job_order_object = arvados.current_job()['script_parameters']
18
19     print job_order_object
20
21     for k,v in job_order_object.items():
22         if arvados.util.keep_locator_pattern.match(v):
23             job_order_object[k] = "file://%s/%s" % (os.environ['TASK_KEEPMOUNT'], v)
24
25     runner = arvados_cwl.ArvCwlRunner(api_client=arvados.api('v1', model=OrderedJsonModel()))
26
27     t = cwltool.main.load_tool(job_order_object, False, True, runner.arvMakeTool, True)
28
29     outputObj = runner.arvExecutor(t, job_order_object, "", None)
30
31     c = arvados.collection.Collection()
32     with c.open("cwl.output.json", "w") as f:
33         json.dump(outputObj, f, indent=4)
34
35     api.job_tasks().update(uuid=arvados.current_task()['uuid'],
36                                          body={
37                                              'output': c.save_new(create_collection_record=False),
38                                              'success': True,
39                                              'progress':1.0
40                                          }).execute()
41 except Exception as e:
42     logging.exception("Unhandled exception")
43     api.job_tasks().update(uuid=arvados.current_task()['uuid'],
44                                          body={
45                                              'output': None,
46                                              'success': False,
47                                              'progress':1.0
48                                          }).execute()