diff --git a/shared/workspaces/workspaces/capability/services/capability_engine.py b/shared/workspaces/workspaces/capability/services/capability_engine.py index a8a99f930cd54b33abb47fdace64d2fb7f44a9e1..b83427072e854580cc990f6031a9666bce559e8d 100644 --- a/shared/workspaces/workspaces/capability/services/capability_engine.py +++ b/shared/workspaces/workspaces/capability/services/capability_engine.py @@ -22,17 +22,26 @@ class CapabilityEngine(CapabilityEngineIF): ): self.capability_info = capability_info self.workflow_service = workflow_service + self.execution = None - def execute(self, execution: CapabilityExecutionIF): + def load_engine(self, execution: CapabilityExecutionIF): + """ + Load capability execution of interest into capability engine for access and execution + :param execution: execution to be executed by this engine + :return: + """ + self.execution = execution + + def execute(self): """ Communicate with workflow service and send a request to run a workflow with given settings :param execution: """ - step_sequence = CapabilitySequence.from_str(execution.steps) + step_sequence = CapabilitySequence.from_str(self.execution.steps) # Grab value of current step (workflow name) - cur_step = step_sequence[int(execution.current_step)] - cur_step.execute(self, execution) + cur_step = step_sequence[int(self.execution.current_step)] + cur_step.execute(self, self.execution) def submit_workflow_request( self, execution_id: int, workflow_name: str, workflow_args: dict, files: List[AbstractFile] diff --git a/shared/workspaces/workspaces/capability/services/capability_queue.py b/shared/workspaces/workspaces/capability/services/capability_queue.py index cf3caa4a4d9e69d73e97fa27e68c54c399e1a92a..1762579f260f23dbc969a0e99b932c5b4224f07b 100644 --- a/shared/workspaces/workspaces/capability/services/capability_queue.py +++ b/shared/workspaces/workspaces/capability/services/capability_queue.py @@ -71,9 +71,10 @@ class CapabilityQueue(CapabilityQueueIF): if engine: execution = self.capability_info.lookup_execution(execution.id) # Start engine - engine.execute(execution) + engine.load_engine(execution) # Move engine to in-use list self.engine_list.in_use.append(engine) + engine.execute() else: # FIXME: Logging print("No available engines. Try again later.") @@ -87,7 +88,7 @@ class CapabilityQueue(CapabilityQueueIF): :return: Corresponding engine """ for engine in self.engine_list.in_use: - if engine.execution_id == execution_id: + if engine.execution.id == execution_id: # Found correct engine return engine @@ -99,7 +100,6 @@ class CapabilityQueue(CapabilityQueueIF): """ engine = self.find_engine(execution_id) self.engine_list.in_use.remove(engine) - engine.execution_id = None engine.execution = None self.engine_list.available.put(engine)