From 2f5a640c4c029d852520433a88c1ddc261e125a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Mon, 16 Sep 2024 14:17:20 +0200 Subject: [PATCH] chore: refactored task autostart --- src/pydase/task/autostart.py | 40 +++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/src/pydase/task/autostart.py b/src/pydase/task/autostart.py index 8f7344e..b29a92b 100644 --- a/src/pydase/task/autostart.py +++ b/src/pydase/task/autostart.py @@ -1,5 +1,8 @@ +from typing import Any + import pydase.data_service.data_service import pydase.task.task +from pydase.task.task_status import TaskStatus from pydase.utils.helpers import is_property_attribute @@ -13,15 +16,28 @@ def autostart_service_tasks( """ for attr in dir(service): - if not is_property_attribute(service, attr): # prevent eval of property attrs - val = getattr(service, attr) - if isinstance(val, pydase.task.task.Task) and val.autostart: - val.start() - elif isinstance(val, pydase.DataService): - autostart_service_tasks(val) - elif isinstance(val, list): - for entry in val: - autostart_service_tasks(entry) - elif isinstance(val, dict): - for entry in val.values(): - autostart_service_tasks(entry) + if is_property_attribute(service, attr): # prevent eval of property attrs + continue + + val = getattr(service, attr) + if ( + isinstance(val, pydase.task.task.Task) + and val.autostart + and val.status == TaskStatus.NOT_RUNNING + ): + val.start() + else: + autostart_nested_service_tasks(val) + + +def autostart_nested_service_tasks( + service: pydase.data_service.data_service.DataService | list[Any] | dict[Any, Any], +) -> None: + if isinstance(service, pydase.DataService): + autostart_service_tasks(service) + elif isinstance(service, list): + for entry in service: + autostart_service_tasks(entry) + elif isinstance(service, dict): + for entry in service.values(): + autostart_service_tasks(entry)