def initiate(self, session, run, ancestor=None, parameters=None, values=None): if not run.is_active: return operation = session.query(Operation).get(self.operation) if not operation: raise UnknownOperationError(self.operation) params = {} if operation.parameters: recursive_merge(params, operation.parameters) if self.parameters: recursive_merge(params, self.parameters) if parameters: recursive_merge(params, parameters) execution = run.create_execution(session, self.name, ancestor=ancestor, name=(self.description or operation.name)) session.flush() interpolator = self._construct_interpolator(run, execution, values) if params: params = interpolator.interpolate(operation.schema, params) else: params = None workflow = run.workflow.workflow environment = Environment(workflow, run, interpolator, output=values, ancestor=execution) preoperation = self.preoperation if preoperation: preoperation.evaluate(session, environment) if params: params = operation.schema.serialize(params) execution.start(params) session.call_after_commit(operation.initiate, id=execution.id, tag=self.name, input=params, timeout=self.timeout)
def merge(self, values): recursive_merge(self, values)