From 1f7c2fa0ab46e819dc1bd9f76cb8fa90827b5b2f Mon Sep 17 00:00:00 2001 From: jo Date: Tue, 19 Jul 2022 18:53:06 +0200 Subject: [PATCH] chore(api): document version endpoint --- api/libretime_api/core/router.py | 7 ++++++- api/libretime_api/core/serializers/__init__.py | 1 + api/libretime_api/core/serializers/info.py | 6 ++++++ api/libretime_api/core/views/__init__.py | 2 +- api/libretime_api/core/views/info.py | 14 ++++++++++++++ api/libretime_api/core/views/version.py | 10 ---------- api/libretime_api/urls.py | 2 -- api/schema.yml | 13 ++++++++++++- 8 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 api/libretime_api/core/serializers/info.py create mode 100644 api/libretime_api/core/views/info.py delete mode 100644 api/libretime_api/core/views/version.py diff --git a/api/libretime_api/core/router.py b/api/libretime_api/core/router.py index dcbf5563d..3d4ac952c 100644 --- a/api/libretime_api/core/router.py +++ b/api/libretime_api/core/router.py @@ -1,3 +1,4 @@ +from django.urls import path from rest_framework import routers from .views import ( @@ -9,6 +10,7 @@ from .views import ( ThirdPartyTrackReferenceViewSet, UserTokenViewSet, UserViewSet, + VersionView, ) router = routers.DefaultRouter() @@ -21,4 +23,7 @@ router.register("user-tokens", UserTokenViewSet) router.register("celery-tasks", CeleryTaskViewSet) router.register("third-party-track-references", ThirdPartyTrackReferenceViewSet) -urls = router.urls +urls = [ + *router.urls, + path("version/", VersionView.as_view()), +] diff --git a/api/libretime_api/core/serializers/__init__.py b/api/libretime_api/core/serializers/__init__.py index 1431072da..d3c89a503 100644 --- a/api/libretime_api/core/serializers/__init__.py +++ b/api/libretime_api/core/serializers/__init__.py @@ -1,4 +1,5 @@ from .auth import LoginAttemptSerializer, UserTokenSerializer +from .info import VersionSerializer from .preference import PreferenceSerializer, StreamSettingSerializer from .service import ServiceRegisterSerializer from .user import UserSerializer diff --git a/api/libretime_api/core/serializers/info.py b/api/libretime_api/core/serializers/info.py new file mode 100644 index 000000000..7195b8c9d --- /dev/null +++ b/api/libretime_api/core/serializers/info.py @@ -0,0 +1,6 @@ +from rest_framework import serializers + + +# pylint: disable=abstract-method +class VersionSerializer(serializers.Serializer): + api_version = serializers.CharField() diff --git a/api/libretime_api/core/views/__init__.py b/api/libretime_api/core/views/__init__.py index 18ccd2a9f..b2f7804be 100644 --- a/api/libretime_api/core/views/__init__.py +++ b/api/libretime_api/core/views/__init__.py @@ -1,6 +1,6 @@ from .auth import LoginAttemptViewSet, UserTokenViewSet +from .info import VersionView from .preference import PreferenceViewSet, StreamSettingViewSet from .service import ServiceRegisterViewSet from .user import UserViewSet -from .version import version from .worker import CeleryTaskViewSet, ThirdPartyTrackReferenceViewSet diff --git a/api/libretime_api/core/views/info.py b/api/libretime_api/core/views/info.py new file mode 100644 index 000000000..121be34f5 --- /dev/null +++ b/api/libretime_api/core/views/info.py @@ -0,0 +1,14 @@ +from django.conf import settings +from rest_framework.permissions import AllowAny +from rest_framework.response import Response +from rest_framework.views import APIView + +from ..serializers import VersionSerializer + + +class VersionView(APIView): + permission_classes = [AllowAny] + serializer_class = VersionSerializer + + def get(self, request): + return Response({"api_version": settings.API_VERSION}) diff --git a/api/libretime_api/core/views/version.py b/api/libretime_api/core/views/version.py deleted file mode 100644 index ef05e401d..000000000 --- a/api/libretime_api/core/views/version.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.conf import settings -from rest_framework.decorators import api_view, permission_classes -from rest_framework.permissions import AllowAny -from rest_framework.response import Response - - -@api_view(["GET"]) -@permission_classes((AllowAny,)) -def version(request, *args, **kwargs): - return Response({"api_version": settings.API_VERSION}) diff --git a/api/libretime_api/urls.py b/api/libretime_api/urls.py index 8a21395af..1fd08d7b3 100644 --- a/api/libretime_api/urls.py +++ b/api/libretime_api/urls.py @@ -8,7 +8,6 @@ from django.urls import include, path from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView from .core.router import urls as core_urls -from .core.views import version from .history.router import urls as history_urls from .podcasts.router import urls as podcasts_urls from .schedule.router import urls as schedule_urls @@ -24,7 +23,6 @@ api_urls += storage_urls urlpatterns = [ path("api/v2/", include(api_urls)), - path("api/v2/version/", version), path( "api/v2/schema/", SpectacularAPIView.as_view(), diff --git a/api/schema.yml b/api/schema.yml index 72e265ed8..d2dd093db 100644 --- a/api/schema.yml +++ b/api/schema.yml @@ -5070,7 +5070,11 @@ paths: - {} responses: "200": - description: No response body + content: + application/json: + schema: + $ref: "#/components/schemas/Version" + description: "" /api/v2/webstream-metadata/: get: operationId: webstream_metadata_list @@ -7928,6 +7932,13 @@ components: - item_url - token - user + Version: + type: object + properties: + api_version: + type: string + required: + - api_version Webstream: type: object properties: