11 #import arvados.command.ws as ws
14 arvrun_parser = argparse.ArgumentParser()
15 arvrun_parser.add_argument('--dry-run', action="store_true")
16 arvrun_parser.add_argument('--local', action="store_true")
17 arvrun_parser.add_argument('--docker-image', type=str, default="arvados/jobs")
18 arvrun_parser.add_argument('--git-dir', type=str, default="")
19 arvrun_parser.add_argument('command')
20 arvrun_parser.add_argument('args', nargs=argparse.REMAINDER)
24 class ArvFile(object):
25 def __init__(self, prefix, fn):
29 def statfile(prefix, fn, pattern):
30 absfn = os.path.abspath(fn)
31 if os.path.exists(absfn):
32 fn = os.path.abspath(fn)
34 if stat.S_ISREG(st.st_mode):
35 mount = os.path.dirname(fn)+"/.arvados#collection"
36 if os.path.exists(mount):
37 with file(mount, 'r') as f:
39 return prefix+"$(file "+c["portable_data_hash"]+"/" + os.path.basename(fn) + ")"
41 needupload_files.append(fn)
42 return ArvFile(prefix, fn[1:])
45 def main(arguments=None):
46 args = arvrun_parser.parse_args(arguments)
48 patterns = [re.compile("(--[^=]+=)(.*)"),
49 re.compile("(-[^=]+=)(.*)"),
50 re.compile("(-.)(.+)")]
60 commandargs.append(statfile(m.group(1), m.group(2), p))
66 commandargs.append(statfile('', a, None))
70 files = [c for c in commandargs if isinstance(c, ArvFile)]
80 pathstep = sp[0] + "/"
82 if not c.fn.startswith(pathstep):
86 pathprefix += pathstep
88 c.fn = c.fn[len(pathstep):]
93 print("cd %s" % pathprefix)
94 print("arv-put \"%s\"" % '" "'.join([c.fn for c in files]))
97 pdh = put.main(["--portable-data-hash"]+[c.fn for c in files])
99 commandargs = [("%s$(file %s/%s)" % (c.prefix, pdh, c.fn)) if isinstance(c, ArvFile) else c for c in commandargs]
104 for j in xrange(0, len(commandargs)):
109 cut = j if cut is None else cut
113 cut = j if cut is None else cut
118 commandargs = commandargs[:cut]
121 "script": "run-command",
122 "script_version": "3609-arv-run",
123 "repository": "arvados",
124 "script_parameters": {
125 "command": [args.command]+commandargs
127 "runtime_constraints": {
128 "docker_image": args.docker_image
133 component["script_parameters"]["task.stdin"] = stdio[0][0]
135 component["script_parameters"]["task.stdout"] = stdio[1][0]
140 args.command: component
142 "state":"RunningOnServer"
146 print(json.dumps(pipeline, indent=4))
148 subprocess.call(["arv-crunch-job", "--job", json.dumps(component), "--git-dir", args.git_dir])
150 api = arvados.api('v1')
151 pi = api.pipeline_instances().create(body=pipeline).execute()
152 #ws.main(["--pipeline", pi["uuid"]])
154 if __name__ == '__main__':