From 554d6f7daa608944285be5279541ab32c60a808c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Mon, 29 Jul 2024 13:30:57 +0200 Subject: [PATCH] changes http API (reflected in openapi specification) --- docs/user-guide/interaction/openapi.yaml | 29 +++++++++++++++---- .../server/web_server/api/v1/application.py | 11 +++++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/docs/user-guide/interaction/openapi.yaml b/docs/user-guide/interaction/openapi.yaml index b2c2def..d3bee4b 100644 --- a/docs/user-guide/interaction/openapi.yaml +++ b/docs/user-guide/interaction/openapi.yaml @@ -37,14 +37,31 @@ paths: readonly: false type: float value: 12.1 - DoesNotExist: - summary: Attribute or does not exist + '400': + description: Could not get attribute + content: + application/json: + schema: + $ref: '#/components/schemas/SerializedException' + examples: + List: + summary: List out of index value: docs: null - full_access_path: device.channel[0].voltage + full_access_path: "" + name: SerializationPathError readonly: false - type: "None" - value: null + type: Exception + value: "Index '2': list index out of range" + Attribute: + summary: Attribute or dict key does not exist + value: + docs: null + full_access_path: "" + name: SerializationPathError + readonly: false + type: Exception + value: "Key 'invalid_attribute': 'invalid_attribute'." /api/v1/update_value: put: tags: @@ -79,7 +96,7 @@ paths: type: Exception value: "Index '2': list index out of range" Attribute: - summary: Attribute or does not exist + summary: Attribute does not exist value: docs: null full_access_path: "" diff --git a/src/pydase/server/web_server/api/v1/application.py b/src/pydase/server/web_server/api/v1/application.py index aa3cbab..78652f2 100644 --- a/src/pydase/server/web_server/api/v1/application.py +++ b/src/pydase/server/web_server/api/v1/application.py @@ -19,6 +19,9 @@ logger = logging.getLogger(__name__) API_VERSION = "v1" +STATUS_OK = 200 +STATUS_FAILED = 400 + def create_api_application(state_manager: StateManager) -> aiohttp.web.Application: api_application = aiohttp.web.Application( @@ -30,12 +33,14 @@ def create_api_application(state_manager: StateManager) -> aiohttp.web.Applicati access_path = request.rel_url.query["access_path"] + status = STATUS_OK try: result = get_value(state_manager, access_path) except Exception as e: logger.exception(e) result = dump(e) - return aiohttp.web.json_response(result) + status = STATUS_FAILED + return aiohttp.web.json_response(result, status=status) async def _update_value(request: aiohttp.web.Request) -> aiohttp.web.Response: data: UpdateDict = await request.json() @@ -46,7 +51,7 @@ def create_api_application(state_manager: StateManager) -> aiohttp.web.Applicati return aiohttp.web.json_response() except Exception as e: logger.exception(e) - return aiohttp.web.json_response(dump(e), status=400) + return aiohttp.web.json_response(dump(e), status=STATUS_FAILED) async def _trigger_method(request: aiohttp.web.Request) -> aiohttp.web.Response: data: TriggerMethodDict = await request.json() @@ -56,7 +61,7 @@ def create_api_application(state_manager: StateManager) -> aiohttp.web.Applicati except Exception as e: logger.exception(e) - return aiohttp.web.json_response(dump(e)) + return aiohttp.web.json_response(dump(e), status=STATUS_FAILED) api_application.router.add_get("/get_value", _get_value) api_application.router.add_post("/update_value", _update_value)