Exemplo n.º 1
0
    def eval(self, data):
        """Evaluate the script and return executable."""
        try:
            inputs = data.input.copy()
            hydrate_input_references(inputs, data.process.input_schema)
            hydrate_input_uploads(inputs, data.process.input_schema)

            inputs["proc"] = {"data_id": data.id, "data_path": settings.FLOW_EXECUTOR["DATA_PATH"]}

            script_template = data.process.run.get("bash", "")

            script = render_template(script_template, template.Context(inputs))

        except template.TemplateSyntaxError as ex:
            data.status = Data.STATUS_ERROR
            data.process_error.append("Error in process script: {}".format(ex))
            data.save()
            return None

        return script
Exemplo n.º 2
0
    def evaluate(self, data):
        """Evaluate the code needed to compute a given Data object."""
        try:
            inputs = data.input.copy()
            hydrate_input_references(inputs, data.process.input_schema)
            hydrate_input_uploads(inputs, data.process.input_schema)

            inputs['proc'] = {
                'data_id': data.id,
                'data_dir': settings.FLOW_EXECUTOR['DATA_DIR'],
            }

            script_template = data.process.run.get('program', '')

            # Get the appropriate expression engine. If none is defined, do not evaluate
            # any expressions.
            expression_engine = data.process.requirements.get('expression-engine', None)
            if not expression_engine:
                return script_template

            return self.get_expression_engine(expression_engine).evaluate_block(script_template, inputs)
        except EvaluationError as error:
            raise ExecutionError('{}'.format(error))
Exemplo n.º 3
0
    def eval(self, data):
        """Evaluate the script and return executable."""
        try:
            inputs = data.input.copy()
            hydrate_input_references(inputs, data.process.input_schema)
            hydrate_input_uploads(inputs, data.process.input_schema)

            inputs['proc'] = {
                'data_id': data.id,
                'data_dir': settings.FLOW_EXECUTOR['DATA_DIR'],
            }

            script_template = data.process.run.get('bash', '')

            script = render_template(script_template, template.Context(inputs))

        except template.TemplateSyntaxError as ex:
            data.status = Data.STATUS_ERROR
            data.process_error.append('Error in process script: {}'.format(ex))
            data.save()
            return None

        return script