Spaces:
Running
Running
from time import sleep | |
import yaml | |
from omagent_core.clients.devices.Aaas.callback import AaasCallback | |
from omagent_core.clients.devices.Aaas.input import AaasInput | |
from omagent_core.engine.automator.task_handler import TaskHandler | |
from omagent_core.engine.http.models.workflow_status import terminal_status | |
from omagent_core.engine.workflow.conductor_workflow import ConductorWorkflow | |
from omagent_core.services.connectors.redis import RedisConnector | |
from omagent_core.utils.build import build_from_file | |
from omagent_core.utils.container import container | |
from omagent_core.utils.logger import logging | |
from omagent_core.utils.registry import registry | |
registry.import_module() | |
container.register_connector(name="redis_stream_client", connector=RedisConnector) | |
# container.register_stm(stm='RedisSTM') | |
container.register_callback(callback=AaasCallback) | |
container.register_input(input=AaasInput) | |
class AaasClient: | |
def __init__( | |
self, | |
interactor: ConductorWorkflow = None, | |
processor: ConductorWorkflow = None, | |
config_path: str = "./config", | |
workers: list = [], | |
) -> None: | |
self._interactor = interactor | |
self._processor = processor | |
self._config_path = config_path | |
self._workers = workers | |
def start_interactor(self): | |
worker_config = build_from_file(self._config_path) | |
self._task_handler_interactor = TaskHandler( | |
worker_config=worker_config, workers=self._workers | |
) | |
self._task_handler_interactor.start_processes() | |
# workflow_execution_id = self._interactor.start_workflow_with_input(workflow_input={}) | |
def stop_interactor(self): | |
self._task_handler_interactor.stop_processes() | |
def start_processor(self): | |
workflow_instance_id = None | |
try: | |
worker_config = build_from_file(self._config_path) | |
self._task_handler_processor = TaskHandler( | |
worker_config=worker_config, workers=self._workers | |
) | |
self._task_handler_processor.start_processes() | |
workflow_instance_id = self._processor.start_workflow_with_input( | |
workflow_input={} | |
) | |
while True: | |
status = self._processor.get_workflow( | |
workflow_id=workflow_instance_id | |
).status | |
if status in terminal_status: | |
workflow_instance_id = self._processor.start_workflow_with_input( | |
workflow_input={} | |
) | |
sleep(1) | |
except KeyboardInterrupt: | |
logging.info("\nDetected Ctrl+C, stopping workflow...") | |
if workflow_instance_id is not None: | |
self._processor._executor.terminate(workflow_id=workflow_instance_id) | |
raise | |
def stop_processor(self): | |
self._task_handler_processor.stop_processes() | |