def load_file_content(self, binding, val): load = binding and binding.get('loadContents') if load: map_rec_collection( lambda x: x.load_content() if isinstance(x, File) else None, val )
def collect_files(inputs): files = [] def append_file(v): if isinstance(v, File): files.append(v) map_rec_collection(append_file, inputs) return files
def get_inputs(app, args, basedir=None): basedir = basedir or os.path.abspath('.') inputs = app.construct_inputs(args) return map_rec_collection( lambda v: rebase_path(v, basedir), inputs )
def run(self, job, job_dir=None): job_dir = os.path.abspath(job_dir or job.id) if not job_dir.endswith('/'): job_dir += '/' os.mkdir(job_dir) os.chmod(job_dir, os.stat(job_dir).st_mode | stat.S_IROTH | stat.S_IWOTH) self.cli_job = CLIJob(job) if self.container: self.ensure_files(job, job_dir) abspath_job = Job(job.id, job.app, copy.deepcopy(job.inputs), job.allocated_resources, job.context) self.install(job=job) cmd_line = self.command_line(job, job_dir) self.job_dump(job, job_dir) self.container.run(cmd_line, job_dir) result_path = os.path.abspath(job_dir) + '/result.cwl.json' if os.path.exists(result_path): with open(result_path, 'r') as res: outputs = json.load(res) else: with open(result_path, 'w') as res: outputs = self.cli_job.get_outputs( os.path.abspath(job_dir), abspath_job) json.dump(outputs, res) outputs = { o.id: construct_files(outputs.get(o.id), o.validator) for o in job.app.outputs } self.unmap_paths(outputs) def write_rbx(f): if isinstance(f, File): with open(f.path + '.rbx.json', 'w') as rbx: json.dump(f.to_dict(), rbx) map_rec_collection(write_rbx, outputs) return outputs
def run(self, job, job_dir=None): job_dir = os.path.abspath(job_dir or job.id) if not job_dir.endswith('/'): job_dir += '/' os.mkdir(job_dir) os.chmod(job_dir, os.stat(job_dir).st_mode | stat.S_IROTH | stat.S_IWOTH) self.cli_job = CLIJob(job) if self.container: self.ensure_files(job, job_dir) abspath_job = Job( job.id, job.app, copy.deepcopy(job.inputs), job.allocated_resources, job.context ) self.install(job=job) cmd_line = self.command_line(job, job_dir) self.job_dump(job, job_dir) self.container.run(cmd_line, job_dir) result_path = os.path.abspath(job_dir) + '/result.cwl.json' if os.path.exists(result_path): with open(result_path, 'r') as res: outputs = json.load(res) else: with open(result_path, 'w') as res: outputs = self.cli_job.get_outputs( os.path.abspath(job_dir), abspath_job) json.dump(outputs, res) outputs = {o.id: construct_files(outputs.get(o.id), o.validator) for o in job.app.outputs} self.unmap_paths(outputs) def write_rbx(f): if isinstance(f, File): with open(f.path + '.rbx.json', 'w') as rbx: json.dump(f.to_dict(), rbx) map_rec_collection(write_rbx, outputs) return outputs
def get_inputs(args, inputs, basedir=None): basedir = basedir or os.path.abspath('.') constructed = {} for i in inputs: val = args.get(i.id) if i.depth == 0: cons = construct_files(val, i.validator) else: cons = [construct_files(e, i.validator) for e in val] if val else [] if cons: constructed[i.id] = cons return map_rec_collection(lambda v: rebase_path(v, basedir), constructed)
def get_inputs(args, inputs, basedir=None): basedir = basedir or os.path.abspath('.') constructed = {} for i in inputs: val = args.get(i.id) if i.depth == 0: cons = construct_files(val, i.validator) else: cons = [construct_files(e, i.validator) for e in val] if val else [] if cons: constructed[i.id] = cons return map_rec_collection( lambda v: rebase_path(v, basedir), constructed )
def load_file_content(self, binding, val): load = binding and binding.get('loadContents') if load: map_rec_collection( lambda x: x.load_content() if isinstance(x, File) else None, val)
def run(self, job, job_dir=None): self.load_input_content(job) job_dir = os.path.abspath(job_dir or job.id) if not job_dir.endswith('/'): job_dir += '/' if not os.path.exists(job_dir): os.mkdir(job_dir) os.chmod(job_dir, os.stat(job_dir).st_mode | stat.S_IROTH | stat.S_IWOTH) self.cli_job = CLIJob(job) eval = ValueResolver(job) cfr = self.get_requirement_or_hint(CreateFileRequirement) if cfr: cfr.create_files(job_dir, eval) env = None evr = self.get_requirement_or_hint(EnvVarRequirement) if evr: env = evr.var_map(eval) self.ensure_files(job, job_dir) self.install(job=job) abspath_job = Job( job.id, job.app, copy.deepcopy(job.inputs), job.allocated_resources, job.context ) cmd_line = self.command_line(job, job_dir) log.info("Running: %s" % cmd_line) self.job_dump(job, job_dir) if self.container: self.container.run(cmd_line, job_dir, env) else: ret = subprocess.call(['bash', '-c', cmd_line], cwd=job_dir) if ret != 0: raise RabixError("Command failed with exit status %s" % ret) result_path = os.path.abspath(job_dir) + '/cwl.output.json' if os.path.exists(result_path): with open(result_path, 'r') as res: outputs = json.load(res) else: with open(result_path, 'w') as res: outputs = self.cli_job.get_outputs( os.path.abspath(job_dir), abspath_job) json.dump(job.context.to_primitive(outputs), res) self.unmap_paths(outputs) def write_rbx(f): if isinstance(f, File): with open(f.path + '.rbx.json', 'w') as rbx: json.dump(f.to_dict(), rbx) map_rec_collection(write_rbx, outputs) return outputs
def run(self, job, job_dir=None): self.load_input_content(job) job_dir = os.path.abspath(job_dir or job.id) if not job_dir.endswith('/'): job_dir += '/' if not os.path.exists(job_dir): os.mkdir(job_dir) os.chmod(job_dir, os.stat(job_dir).st_mode | stat.S_IROTH | stat.S_IWOTH) self.cli_job = CLIJob(job) eval = ValueResolver(job) cfr = self.get_requirement_or_hint(CreateFileRequirement) if cfr: cfr.create_files(job_dir, eval) env = None evr = self.get_requirement_or_hint(EnvVarRequirement) if evr: env = evr.var_map(eval) self.ensure_files(job, job_dir) self.install(job=job) abspath_job = Job(job.id, job.app, copy.deepcopy(job.inputs), job.allocated_resources, job.context) cmd_line = self.command_line(job, job_dir) log.info("Running: %s" % cmd_line) self.job_dump(job, job_dir) if self.container: self.container.run(cmd_line, job_dir, env) else: ret = subprocess.call(['bash', '-c', cmd_line], cwd=job_dir) if ret != 0: raise RabixError("Command failed with exit status %s" % ret) result_path = os.path.abspath(job_dir) + '/cwl.output.json' if os.path.exists(result_path): with open(result_path, 'r') as res: outputs = json.load(res) else: with open(result_path, 'w') as res: outputs = self.cli_job.get_outputs(os.path.abspath(job_dir), abspath_job) json.dump(job.context.to_primitive(outputs), res) self.unmap_paths(outputs) def write_rbx(f): if isinstance(f, File): with open(f.path + '.rbx.json', 'w') as rbx: json.dump(f.to_dict(), rbx) map_rec_collection(write_rbx, outputs) return outputs