Skip to content
Snippets Groups Projects
Commit 76334e7e authored by Charlotte Hausman's avatar Charlotte Hausman
Browse files

fix CapabilityEngine to actually load the capability execution it's executing...

fix CapabilityEngine to actually load the capability execution it's executing and then properly release the engine after completion
parent 39e95772
No related branches found
No related tags found
1 merge request!86fix CapabilityEngine
Pipeline #609 passed
from workspaces.capability.services.capability_info import CapabilityInfo
from workspaces.capability.services.capability_engine import CapabilityEngine
pytest_plugins = ["testing.utils.conftest"]
"""
Tests for CapabilityEngine
"""
def test_load_engine():
pass
def test_execute():
pass
def test_submit_workflow_request():
pass
......@@ -22,17 +22,24 @@ 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):
"""
Communicate with workflow service and send a request to run a workflow with given settings
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
:param execution:
def execute(self):
"""
Communicate with workflow service and send a request to run a workflow with given settings
"""
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]
......
......@@ -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)
......
......@@ -101,9 +101,12 @@ class CapabilityEngineIF(ABC):
"""
Executes a prepare and run workflow step of a capability
"""
@abstractmethod
def load_engine(self, execution: CapabilityExecutionIF):
pass
@abstractmethod
def execute(self, execution: CapabilityExecutionIF):
def execute(self):
pass
@abstractmethod
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment