Adding error management
This commit is contained in:
@@ -11,7 +11,7 @@ from components.workflows.commands import WorkflowDesignerCommandManager
|
||||
from components.workflows.components.WorkflowPlayer import WorkflowPlayer
|
||||
from components.workflows.constants import WORKFLOW_DESIGNER_INSTANCE_ID, ProcessorTypes
|
||||
from components.workflows.db_management import WorkflowsDesignerSettings, WorkflowComponent, \
|
||||
Connection, WorkflowsDesignerDbManager, WorkflowsPlayerSettings
|
||||
Connection, WorkflowsDesignerDbManager, WorkflowsPlayerSettings, WorkflowComponentRuntimeState
|
||||
from components_helpers import apply_boundaries, mk_tooltip, mk_dialog_buttons, mk_icon
|
||||
from core.instance_manager import InstanceManager
|
||||
from core.utils import get_unique_id, make_safe_id
|
||||
@@ -64,6 +64,17 @@ class WorkflowDesigner(BaseComponent):
|
||||
self._state = self._db.load_state(key)
|
||||
self._boundaries = boundaries
|
||||
self.commands = WorkflowDesignerCommandManager(self)
|
||||
|
||||
workflow_name = self._designer_settings.workflow_name
|
||||
self._player = InstanceManager.get(self._session,
|
||||
WorkflowPlayer.create_component_id(self._session, workflow_name),
|
||||
WorkflowPlayer,
|
||||
settings_manager=self._settings_manager,
|
||||
tabs_manager=self.tabs_manager,
|
||||
player_settings=WorkflowsPlayerSettings(workflow_name,
|
||||
list(self._state.components.values())),
|
||||
boundaries=boundaries)
|
||||
|
||||
self._error_message = None
|
||||
|
||||
def set_boundaries(self, boundaries: dict):
|
||||
@@ -178,24 +189,17 @@ class WorkflowDesigner(BaseComponent):
|
||||
|
||||
def play_workflow(self, boundaries: dict):
|
||||
if self._state.selected_component_id is None:
|
||||
return self.error_message("No component selected")
|
||||
|
||||
workflow_name = self._designer_settings.workflow_name
|
||||
player = InstanceManager.get(self._session,
|
||||
WorkflowPlayer.create_component_id(self._session, workflow_name),
|
||||
WorkflowPlayer,
|
||||
settings_manager=self._settings_manager,
|
||||
tabs_manager=self.tabs_manager,
|
||||
player_settings=WorkflowsPlayerSettings(workflow_name,
|
||||
list(self._state.components.values())),
|
||||
boundaries=boundaries)
|
||||
try:
|
||||
player.run()
|
||||
self.tabs_manager.add_tab(f"Workflow {workflow_name}", player, player.key)
|
||||
self._error_message = "No component selected"
|
||||
return self.tabs_manager.refresh()
|
||||
|
||||
try:
|
||||
self._player.run()
|
||||
self.tabs_manager.add_tab(f"Workflow {self._designer_settings.workflow_name}", self._player, self._player.key)
|
||||
|
||||
except Exception as e:
|
||||
return self.error_message(str(e))
|
||||
self._error_message = str(e)
|
||||
|
||||
return self.tabs_manager.refresh()
|
||||
|
||||
def on_processor_details_event(self, component_id: str, event_name: str, details: dict):
|
||||
if component_id in self._state.components:
|
||||
@@ -207,10 +211,6 @@ class WorkflowDesigner(BaseComponent):
|
||||
|
||||
return self.refresh_properties()
|
||||
|
||||
def error_message(self, message: str):
|
||||
self._error_message = message
|
||||
return self.tabs_manager.refresh()
|
||||
|
||||
def __ft__(self):
|
||||
return Div(
|
||||
H1(f"{self._designer_settings.workflow_name}", cls="text-xl font-bold"),
|
||||
@@ -265,13 +265,14 @@ class WorkflowDesigner(BaseComponent):
|
||||
*[NotStr(self._mk_connection_svg(conn)) for conn in self._state.connections],
|
||||
|
||||
# Render components
|
||||
*[self._mk_workflow_component(comp) for comp in self._state.components.values()],
|
||||
*[self._mk_workflow_component(comp, state) for comp, state in zip(self._state.components.values(),
|
||||
self._player.runtime_states)],
|
||||
)
|
||||
|
||||
def _mk_canvas(self, oob=False):
|
||||
return Div(
|
||||
self._mk_elements(),
|
||||
cls="wkf-canvas flex-1 rounded-lg border flex-1",
|
||||
cls=f"wkf-canvas flex-1 rounded-lg border flex-1 {'wkf-canvas-error' if self._error_message else ''}",
|
||||
id=f"c_{self._id}",
|
||||
hx_swap_oob='true' if oob else None,
|
||||
),
|
||||
@@ -503,7 +504,7 @@ class WorkflowDesigner(BaseComponent):
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _mk_workflow_component(component: WorkflowComponent):
|
||||
def _mk_workflow_component(component: WorkflowComponent, component_state: WorkflowComponentRuntimeState):
|
||||
info = COMPONENT_TYPES[component.type]
|
||||
return Div(
|
||||
# Input connection point
|
||||
@@ -515,7 +516,7 @@ class WorkflowDesigner(BaseComponent):
|
||||
Div(
|
||||
Span(info["icon"], cls="text-xl mb-1"),
|
||||
H4(component.title, cls="font-semibold text-xs"),
|
||||
cls=f"wkf-component-content {info['color']}"
|
||||
cls=f"wkf-component-content {info['color']} {'error' if component_state.has_error else ''}"
|
||||
),
|
||||
|
||||
# Output connection point
|
||||
|
||||
Reference in New Issue
Block a user