From e5e3a6b7e2899ec694c6d51bfc4b9c1e7586e21e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 3 Dec 2023 22:52:06 +0100 Subject: [PATCH] make redoc look prettier --- src/c3nav/api/ninja.py | 9 +++++++- src/c3nav/mapdata/api/map.py | 2 +- src/c3nav/mapdata/schemas/models.py | 36 +++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/c3nav/api/ninja.py b/src/c3nav/api/ninja.py index b545ae0e..f3199eae 100644 --- a/src/c3nav/api/ninja.py +++ b/src/c3nav/api/ninja.py @@ -20,7 +20,14 @@ class SwaggerAndRedoc(DocsBase): "defaultModelRendering": "model", }) redoc_config = Redoc(settings={ - + "hideOneOfDescription": True, + "expandSingleSchemaField": True, + "jsonSampleExpandLevel": 4, + "showObjectSchemaExamples": True, + "expandResponses": "200", + "hideSingleRequestSampleTab": True, + "nativeScrollbars": True, + "simpleOneOfTypeLabel": True, }) def render_page(self, request, api): diff --git a/src/c3nav/mapdata/api/map.py b/src/c3nav/mapdata/api/map.py index 44d95c2b..2b982867 100644 --- a/src/c3nav/mapdata/api/map.py +++ b/src/c3nav/mapdata/api/map.py @@ -1,5 +1,5 @@ import json -from typing import Optional +from typing import Annotated, Optional from django.core.serializers.json import DjangoJSONEncoder from django.shortcuts import redirect diff --git a/src/c3nav/mapdata/schemas/models.py b/src/c3nav/mapdata/schemas/models.py index a3277c2a..d0d8f1e4 100644 --- a/src/c3nav/mapdata/schemas/models.py +++ b/src/c3nav/mapdata/schemas/models.py @@ -415,7 +415,17 @@ class TrackablePositionSchema(Schema): ) -class FullLevelLocationSchema(LevelSchema): +def put_locationtype_first(schema): + fields = schema.__fields__.copy() + schema.__fields__ = {"locationtype": fields.pop("locationtype"), **fields} + return schema + + +class LocationTypeSchema(Schema): + locationtype: str + + +class FullLevelLocationSchema(LevelSchema, LocationTypeSchema): """ A level for the location API. See Level schema for details. @@ -423,7 +433,7 @@ class FullLevelLocationSchema(LevelSchema): locationtype: Literal["level"] -class FullSpaceLocationSchema(SimpleGeometryPointAndBoundsSchema, SpaceSchema): +class FullSpaceLocationSchema(SimpleGeometryPointAndBoundsSchema, SpaceSchema, LocationTypeSchema): """ A space with some additional information for the location API. See Space schema for details. @@ -431,7 +441,7 @@ class FullSpaceLocationSchema(SimpleGeometryPointAndBoundsSchema, SpaceSchema): locationtype: Literal["space"] -class FullAreaLocationSchema(SimpleGeometryPointAndBoundsSchema, AreaSchema): +class FullAreaLocationSchema(SimpleGeometryPointAndBoundsSchema, AreaSchema, LocationTypeSchema): """ An area with some additional information for the location API. See Area schema for details. @@ -439,7 +449,7 @@ class FullAreaLocationSchema(SimpleGeometryPointAndBoundsSchema, AreaSchema): locationtype: Literal["area"] -class FullPOILocationSchema(SimpleGeometryPointSchema, POISchema): +class FullPOILocationSchema(SimpleGeometryPointSchema, POISchema, LocationTypeSchema): """ A point of interest with some additional information for the location API. See POI schema for details. @@ -447,7 +457,7 @@ class FullPOILocationSchema(SimpleGeometryPointSchema, POISchema): locationtype: Literal["poi"] -class FullLocationGroupLocationSchema(SimpleGeometryLocationsSchema, LocationGroupSchema): +class FullLocationGroupLocationSchema(SimpleGeometryLocationsSchema, LocationGroupSchema, LocationTypeSchema): """ A location group with some additional information for the location API. See LocationGroup schema for details. @@ -455,7 +465,7 @@ class FullLocationGroupLocationSchema(SimpleGeometryLocationsSchema, LocationGro locationtype: Literal["locationgroup"] -class FullDynamicLocationLocationSchema(DynamicLocationSchema): +class FullDynamicLocationLocationSchema(DynamicLocationSchema, LocationTypeSchema): """ A dynamic location for the location API. See DynamicLocation schema for details. @@ -463,7 +473,7 @@ class FullDynamicLocationLocationSchema(DynamicLocationSchema): locationtype: Literal["dynamiclocation"] -class CustomLocationLocationSchema(SimpleGeometryPointAndBoundsSchema, CustomLocationSchema): +class CustomLocationLocationSchema(SimpleGeometryPointAndBoundsSchema, CustomLocationSchema, LocationTypeSchema): """ A custom location for the location API. See CustomLocation schema for details. @@ -471,7 +481,7 @@ class CustomLocationLocationSchema(SimpleGeometryPointAndBoundsSchema, CustomLoc locationtype: Literal["customlocation"] -class TrackablePositionLocationSchema(TrackablePositionSchema): +class TrackablePositionLocationSchema(TrackablePositionSchema, LocationTypeSchema): """ A trackable position for the location API. See TrackablePosition schema for details. @@ -639,13 +649,19 @@ class PositionStatusSchema(Schema): ) +class PositionAvailabilitySchema(Schema): + available: str + + class PositionUnavailableStatusSchema(PositionStatusSchema, SimpleGeometryPointAndBoundsSchema, - TrackablePositionSchema): + TrackablePositionSchema, PositionAvailabilitySchema): + """ position unavailable """ available: Literal[False] class PositionAvailableStatusSchema(PositionStatusSchema, SimpleGeometryPointAndBoundsSchema, TrackablePositionSchema, - CustomLocationSchema): + CustomLocationSchema, PositionAvailabilitySchema): + """ position available """ available: Literal[True]