updates http trigger_method endpoint to handle async methods, as well

This commit is contained in:
Mose Müller 2024-12-02 13:44:15 +01:00
parent c002d04328
commit cfe190ca5b

View File

@ -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)