Source code for icolos.scripts.icolos_workflow

from typing import Dict
from pydantic import BaseModel
import os
import sys

from icolos.core.composite_agents.workflow import WorkFlow
from icolos.utils.enums.logging_enums import LoggingConfigEnum

from icolos.utils.entry_point_functions.logging_helper_functions import (
    initialize_logging,
)
from icolos.utils.entry_point_functions.parsing_functions import (
    get_runtime_global_variables,
    add_global,
)
from icolos.utils.general.files_paths import attach_root_path
from icolos.utils.enums.composite_agents_enums import WorkflowEnum

_WE = WorkflowEnum()
_LE = LoggingConfigEnum()


[docs]class IcolosWorkflow(BaseModel): """ Alternative programmatic entrypoint for the Icolos workflow """ config: Dict = None workflow: WorkFlow = None logging: str = None global_vars: Dict = None def __init__(self, config, global_vars: Dict = None) -> None: super().__init__(**config) self.config = self._parse_global_vars(config, global_vars) self.workflow = WorkFlow(**config[_WE.WORKFLOW]) # tutorial settings logs everything to stdout as well as the file self.logging = "tutorial" def _initialize_logging(self): log_conf = attach_root_path(_LE.PATH_CONFIG_TUTORIAL) logger = initialize_logging(log_conf_path=log_conf, workflow_conf=self.config) return logger def _parse_global_vars(self, config, global_vars): # substitute global vars throughout the config file, return modified config if global_vars is not None: config = add_global(config, global_vars, _WE.GLOBAL_VARIABLES) config = add_global( config, get_runtime_global_variables( os.path.join(os.getcwd(), "config.json"), os.path.realpath(__file__) ), _WE.GLOBAL_VARIABLES, ) return config
[docs] def execute(self): self._initialize_logging() self.workflow.initialize() self.workflow.execute() sys.exit(0)