From 0d1df4f9e5c25934b0f8ffe28986ba2f39e332d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Mon, 2 Dec 2024 13:40:56 +0100 Subject: [PATCH] adds endpoint function to trigger async function --- .../server/web_server/api/v1/endpoints.py | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/pydase/server/web_server/api/v1/endpoints.py b/src/pydase/server/web_server/api/v1/endpoints.py index f09a8cf..dca28ab 100644 --- a/src/pydase/server/web_server/api/v1/endpoints.py +++ b/src/pydase/server/web_server/api/v1/endpoints.py @@ -1,4 +1,4 @@ -from typing import Any +from typing import TYPE_CHECKING, Any import pydase.utils.serialization.deserializer import pydase.utils.serialization.serializer @@ -7,6 +7,9 @@ from pydase.server.web_server.sio_setup import TriggerMethodDict, UpdateDict from pydase.utils.helpers import get_object_attr_from_path from pydase.utils.serialization.types import SerializedObject +if TYPE_CHECKING: + from collections.abc import Awaitable, Callable + loads = pydase.utils.serialization.deserializer.loads Serializer = pydase.utils.serialization.serializer.Serializer @@ -36,3 +39,19 @@ def trigger_method(state_manager: StateManager, data: TriggerMethodDict) -> Any: kwargs: dict[str, Any] = loads(serialized_kwargs) if serialized_kwargs else {} return Serializer.serialize_object(method(*args, **kwargs)) + + +async def trigger_async_method( + state_manager: StateManager, data: TriggerMethodDict +) -> Any: + method: Callable[..., Awaitable[Any]] = get_object_attr_from_path( + state_manager.service, data["access_path"] + ) + + serialized_args = data.get("args", None) + args = loads(serialized_args) if serialized_args else [] + + serialized_kwargs = data.get("kwargs", None) + kwargs: dict[str, Any] = loads(serialized_kwargs) if serialized_kwargs else {} + + return Serializer.serialize_object(await method(*args, **kwargs))