100 lines
3.3 KiB
Python
100 lines
3.3 KiB
Python
import logging
|
|
from dataclasses import dataclass, field
|
|
|
|
from components.workflows.constants import WORKFLOWS_SETTINGS_ENTRY
|
|
from core.settings_management import SettingsManager
|
|
|
|
logger = logging.getLogger("WorkflowsSettings")
|
|
|
|
|
|
@dataclass
|
|
class WorkflowsSettings:
|
|
workflows: list[str] = field(default_factory=list)
|
|
selected_workflow: str = None
|
|
|
|
|
|
class WorkflowsDbManager:
|
|
def __init__(self, session: dict, settings_manager: SettingsManager):
|
|
self.session = session
|
|
self.settings_manager = settings_manager
|
|
|
|
def add_workflow(self, workflow_name: str):
|
|
settings = self._get_settings()
|
|
|
|
if not workflow_name:
|
|
raise ValueError("Workflow name cannot be empty.")
|
|
|
|
if workflow_name in settings.workflows:
|
|
raise ValueError(f"Workflow '{workflow_name}' already exists.")
|
|
|
|
settings.workflows.append(workflow_name)
|
|
self.settings_manager.save(self.session, WORKFLOWS_SETTINGS_ENTRY, settings)
|
|
return True
|
|
|
|
def get_workflow(self, workflow_name: str):
|
|
if not workflow_name:
|
|
raise ValueError("Workflow name cannot be empty.")
|
|
|
|
settings = self._get_settings()
|
|
if workflow_name not in settings.workflows:
|
|
raise ValueError(f"Workflow '{workflow_name}' does not exist.")
|
|
|
|
return next(filter(lambda r: r == workflow_name, settings.workflows))
|
|
|
|
# def modify_workflow(self, old_workflow_name, new_workflow_name: str, tables: list[str]):
|
|
# if not old_workflow_name or not new_workflow_name:
|
|
# raise ValueError("Workflow name cannot be empty.")
|
|
#
|
|
# settings = self._get_settings()
|
|
# for workflow in settings.workflows:
|
|
# if workflow == old_workflow_name:
|
|
# workflow.name = new_workflow_name
|
|
# workflow.tables = tables
|
|
#
|
|
# self.settings_manager.save(self.session, workflows_SETTINGS_ENTRY, settings)
|
|
# return workflow
|
|
#
|
|
# else:
|
|
# raise ValueError(f"workflow '{old_workflow_name}' not found.")
|
|
|
|
def remove_workflow(self, workflow_name):
|
|
if not workflow_name:
|
|
raise ValueError("Workflow name cannot be empty.")
|
|
|
|
settings = self._get_settings()
|
|
if workflow_name not in settings.workflows:
|
|
raise ValueError(f"workflow '{workflow_name}' does not exist.")
|
|
|
|
settings.workflows.remove(workflow_name)
|
|
self.settings_manager.save(self.session, WORKFLOWS_SETTINGS_ENTRY, settings)
|
|
return True
|
|
|
|
def exists_workflow(self, workflow_name):
|
|
if not workflow_name:
|
|
raise ValueError("workflow name cannot be empty.")
|
|
|
|
settings = self._get_settings()
|
|
return workflow_name in settings.workflows
|
|
|
|
def get_workflows(self):
|
|
return self._get_settings().workflows
|
|
|
|
def select_workflow(self, workflow_name: str):
|
|
"""
|
|
Select and save the specified workflow name in the current session's settings.
|
|
|
|
:param workflow_name: The name of the workflow to be selected and stored.
|
|
:type workflow_name: str
|
|
:return: None
|
|
"""
|
|
settings = self._get_settings()
|
|
settings.selected_workflow = workflow_name
|
|
self.settings_manager.save(self.session, WORKFLOWS_SETTINGS_ENTRY, settings)
|
|
|
|
def get_selected_workflow(self):
|
|
settings = self._get_settings()
|
|
return settings.selected_workflow
|
|
|
|
def _get_settings(self):
|
|
return self.settings_manager.load(self.session, WORKFLOWS_SETTINGS_ENTRY, default=WorkflowsSettings())
|