Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
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
Пример #4
0
 def run(self, job):
     self.load_input_content(job)
     result = ExpressionEvaluator.evaluate(
         self.engine, self.script, job.to_dict(self.context), None
     )
     return result
Пример #5
0
 def run(self, job):
     self.load_input_content(job)
     result = ExpressionEvaluator.evaluate(self.engine, self.script,
                                           job.to_dict(self.context), None)
     return result
Пример #6
0
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