def __init__(self, job): self.job = job self.app = job.app self._stdin = self.app.stdin self._stdout = self.app.stdout self.base_cmd = self.app.base_command if isinstance(self.base_cmd, six.string_types): self.base_cmd = self.base_cmd.split(' ') self.args = self.app.arguments self.eval = ExpressionEvaluator(job)
class CLIJob(object): def __init__(self, job): self.job = job self.app = job.app self._stdin = self.app.stdin self._stdout = self.app.stdout self.base_cmd = self.app.base_command if isinstance(self.base_cmd, six.string_types): self.base_cmd = self.base_cmd.split(' ') self.args = self.app.arguments self.eval = ExpressionEvaluator(job) @property def stdin(self): if self._stdin: return self.eval.resolve(self._stdin) @property def stdout(self): if self._stdout: return self.eval.resolve(self._stdout) def make_arg_list(self): adapters = [InputAdapter(a.get('valueFrom'), self.eval, {}, a) for a in self.args] ia = InputAdapter(self.job.inputs, self.eval, self.app.inputs) args = ia.as_toplevel(adapters) base_cmd = [self.eval.resolve(item) for item in self.base_cmd] return [six.text_type(arg) for arg in base_cmd + args] def cmd_line(self): a = self.make_arg_list() if self._stdin: a += ['<', self.stdin] if self._stdout: a += ['>', self.eval.resolve(self.stdout)] return ' '.join(a) # TODO: escape def get_outputs(self, job_dir, job): result, outs = {}, self.app.outputs for out in outs: out_binding = out.output_binding ret = os.getcwd() os.chdir(job_dir) pattern = self.eval.resolve(out_binding.get('glob')) or "" files = glob.glob(pattern) result[out.id] = [ { 'path': os.path.abspath(p), 'size': os.stat(p).st_size, # 'checksum': 'sha1$' + # hashlib.sha1(open(os.path.abspath(p)).read()).hexdigest(), 'metadata': meta(p, job.inputs, self.eval, out_binding), 'secondaryFiles': secondary_files(p, out_binding, self.eval) } for p in files] os.chdir(ret) if out.depth == 0: result[out.id] = result[out.id][0] if result[out.id] else None return result
def run(self, job): self.load_input_content(job) result = ExpressionEvaluator.evaluate( self.engine, self.script, job.to_dict(self.context), None ) return result
def run(self, job): self.load_input_content(job) result = ExpressionEvaluator.evaluate(self.engine, self.script, job.to_dict(self.context), None) return result
class CLIJob(object): def __init__(self, job): self.job = job self.app = job.app self._stdin = self.app.stdin self._stdout = self.app.stdout self.base_cmd = self.app.base_command if isinstance(self.base_cmd, six.string_types): self.base_cmd = self.base_cmd.split(' ') self.args = self.app.arguments self.eval = ExpressionEvaluator(job) @property def stdin(self): if self._stdin: return self.eval.resolve(self._stdin) @property def stdout(self): if self._stdout: return self.eval.resolve(self._stdout) def make_arg_list(self): adapters = [ InputAdapter(a.get('valueFrom'), self.eval, {}, a) for a in self.args ] ia = InputAdapter(self.job.inputs, self.eval, self.app.inputs) args = ia.as_toplevel(adapters) base_cmd = [self.eval.resolve(item) for item in self.base_cmd] return [six.text_type(arg) for arg in base_cmd + args] def cmd_line(self): a = self.make_arg_list() if self._stdin: a += ['<', self.stdin] if self._stdout: a += ['>', self.eval.resolve(self.stdout)] return ' '.join(a) # TODO: escape def get_outputs(self, job_dir, job): result, outs = {}, self.app.outputs for out in outs: out_binding = out.output_binding ret = os.getcwd() os.chdir(job_dir) pattern = self.eval.resolve(out_binding.get('glob')) or "" files = glob.glob(pattern) result[out.id] = [ { 'path': os.path.abspath(p), 'size': os.stat(p).st_size, # 'checksum': 'sha1$' + # hashlib.sha1(open(os.path.abspath(p)).read()).hexdigest(), 'metadata': meta(p, job.inputs, self.eval, out_binding), 'secondaryFiles': secondary_files(p, out_binding, self.eval) } for p in files ] os.chdir(ret) if out.depth == 0: result[out.id] = result[out.id][0] if result[out.id] else None return result