From ea335a8fe8af0c4349ca72f4cc158f214a59b1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 3 Dec 2023 23:27:20 +0100 Subject: [PATCH] start making optional attributes look better in redoc --- src/c3nav/editor/api/schemas.py | 11 +++++++++-- src/c3nav/mapdata/api/map.py | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/c3nav/editor/api/schemas.py b/src/c3nav/editor/api/schemas.py index 914ca192..d41932a4 100644 --- a/src/c3nav/editor/api/schemas.py +++ b/src/c3nav/editor/api/schemas.py @@ -15,8 +15,15 @@ GeometryStylesSchema = Annotated[ APIField(description="mapping with a color for each feature type") ] EditorID = Union[ - Annotated[PositiveInt, APIField(title="an existing object that might have been modified in this changeset")], - Annotated[str, APIField(pattern="^c:[0-9]+$", title="an object that was created in this changeset")], + Annotated[PositiveInt, APIField( + title="existing object", + description="ID of an existing object that might have been modified in this changeset" + )], + Annotated[str, APIField( + pattern="^c:[0-9]+$", + title="created object", + description="id of an object that was created in this changeset" + )], ] EditorGeometriesUpdateCacheKeyElem = Annotated[ tuple[ diff --git a/src/c3nav/mapdata/api/map.py b/src/c3nav/mapdata/api/map.py index 2b982867..9d4250c0 100644 --- a/src/c3nav/mapdata/api/map.py +++ b/src/c3nav/mapdata/api/map.py @@ -1,5 +1,5 @@ import json -from typing import Annotated, Optional +from typing import Annotated, Optional, Union from django.core.serializers.json import DjangoJSONEncoder from django.shortcuts import redirect @@ -8,6 +8,7 @@ from ninja import Query from ninja import Router as APIRouter from ninja import Schema from pydantic import Field as APIField +from pydantic import PositiveInt from c3nav.api.auth import auth_permission_responses, auth_responses, validate_responses from c3nav.api.exceptions import API404, APIPermissionDenied, APIRequestValidationFailed @@ -270,15 +271,20 @@ def get_position_by_id(request, position_id: AnyPositionID): raise API404() return location.serialize_position() - class UpdatePositionSchema(Schema): - coordinates_id: Optional[CustomLocationID] = APIField( - description="coordinates to set the location to or None to unset it" + coordinates_id: Union[ + Annotated[CustomLocationID, APIField(title="set coordinates")], + Annotated[None, APIField(title="unset coordinates")], + ] = APIField( + description="coordinates to set the location to or null to unset it" ) - timeout: Optional[int] = APIField( + timeout: Union[ + Annotated[PositiveInt, APIField(title="new timeout")], + Annotated[None, APIField(title="don't change")], + ] = APIField( None, + title="timeout", description="timeout for this new location in seconds, or None if not to change it", - example=None, )