diff --git a/src/pydase/server/web_server/api/v1/application.py b/src/pydase/server/web_server/api/v1/application.py index 37c79cf..1139da6 100644 --- a/src/pydase/server/web_server/api/v1/application.py +++ b/src/pydase/server/web_server/api/v1/application.py @@ -1,3 +1,4 @@ +import inspect import logging from typing import TYPE_CHECKING @@ -7,9 +8,11 @@ import aiohttp_middlewares.error from pydase.data_service.state_manager import StateManager from pydase.server.web_server.api.v1.endpoints import ( get_value, + trigger_async_method, trigger_method, update_value, ) +from pydase.utils.helpers import get_object_attr_from_path from pydase.utils.serialization.serializer import dump if TYPE_CHECKING: @@ -54,8 +57,17 @@ def create_api_application(state_manager: StateManager) -> aiohttp.web.Applicati async def _trigger_method(request: aiohttp.web.Request) -> aiohttp.web.Response: data: TriggerMethodDict = await request.json() + method = get_object_attr_from_path(state_manager.service, data["access_path"]) + try: - return aiohttp.web.json_response(trigger_method(state_manager, data)) + if inspect.iscoroutinefunction(method): + method_return = await trigger_async_method( + state_manager=state_manager, data=data + ) + else: + method_return = trigger_method(state_manager=state_manager, data=data) + + return aiohttp.web.json_response(method_return) except Exception as e: logger.exception(e)