diff --git a/repoapi/settings/common.py b/repoapi/settings/common.py index 5486232..948a227 100644 --- a/repoapi/settings/common.py +++ b/repoapi/settings/common.py @@ -30,7 +30,7 @@ INSTALLED_APPS = [ "django.contrib.staticfiles", "rest_framework", "rest_framework_api_key", - "rest_framework_swagger", + "drf_spectacular", "django_assets", "django_celery_results", "django_extensions", @@ -112,15 +112,20 @@ REST_FRAMEWORK = { "DEFAULT_FILTER_BACKENDS": ( "django_filters.rest_framework.DjangoFilterBackend", ), + "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", } -SWAGGER_SETTINGS = { - "api_version": "0.1", - "info": { - "contact": "dev@sipwise.com", - "description": "repoapi, one ring to rule them all", - "license": "GPL 3.0", - "title": "RepoApi", +SPECTACULAR_SETTINGS = { + "TITLE": "RepoApi", + "DESCRIPTION": "repoapi, one ring to rule them all", + "VERSION": "1.0.0", + "CONTACT": { + "email": "development@sipwise.com", + "url": "https://www.sipwise.com/", + }, + "LICENSE": { + "name": "GPLv3", + "url": "https://www.gnu.org/licenses/gpl-3.0.en.html", }, } diff --git a/repoapi/urls.py b/repoapi/urls.py index 8a20080..6990beb 100644 --- a/repoapi/urls.py +++ b/repoapi/urls.py @@ -14,13 +14,17 @@ # with this program. If not, see . from django.contrib import admin from django.urls import include +from django.urls import path from django.urls import re_path +from drf_spectacular.views import SpectacularAPIView +from drf_spectacular.views import SpectacularRedocView +from drf_spectacular.views import SpectacularSwaggerView from rest_framework.urlpatterns import format_suffix_patterns +from . import views from build import views as build_views from release_dashboard.views import api as rd_api from release_dashboard.views import docker -from repoapi import views api_patterns = [ re_path(r"^$", views.api_root, name="index"), @@ -108,7 +112,15 @@ urlpatterns = [ r"^api-auth/", include("rest_framework.urls", namespace="rest_framework"), ), - re_path(r"^docs/", views.schema_view), + path("api-schema/", SpectacularAPIView.as_view(), name="schema"), + path( + "docs/", + SpectacularSwaggerView.as_view(url_name="schema"), + name="swagger-ui", + ), + path( + "redoc/", SpectacularRedocView.as_view(url_name="schema"), name="redoc" + ), re_path(r"^panel/", include("panel.urls")), re_path( r"^release_panel/", diff --git a/repoapi/views.py b/repoapi/views.py index f5f7893..65233f3 100644 --- a/repoapi/views.py +++ b/repoapi/views.py @@ -1,4 +1,4 @@ -# Copyright (C) 2020 The Sipwise Team - http://sipwise.com +# Copyright (C) 2020-2022 The Sipwise Team - http://sipwise.com # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free @@ -16,25 +16,14 @@ import django_filters from rest_framework import generics from rest_framework import status from rest_framework.decorators import api_view -from rest_framework.decorators import renderer_classes from rest_framework.response import Response from rest_framework.reverse import reverse -from rest_framework.schemas import SchemaGenerator from rest_framework.views import APIView -from rest_framework_swagger.renderers import OpenAPIRenderer -from rest_framework_swagger.renderers import SwaggerUIRenderer from . import serializers from .models import JenkinsBuildInfo as jbi -@api_view() -@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer]) -def schema_view(request): - generator = SchemaGenerator() - return Response(generator.get_schema(request=request)) - - @api_view(("GET",)) def api_root(request, _format=None): return Response( diff --git a/requirements/common.txt b/requirements/common.txt index 3b81950..84690b0 100644 --- a/requirements/common.txt +++ b/requirements/common.txt @@ -8,15 +8,16 @@ django-extensions django-filter django-import-export django-jsonify -django-rest-swagger django-structlog django-timezone-field djangorestframework>=3.6 +drf-spectacular drfapikey flower>=0.9.5 markdown natsort python-debian PyYAML +requests six>=1.9 webassets diff --git a/t/Dockerfile b/t/Dockerfile index 050f613..6269b1e 100644 --- a/t/Dockerfile +++ b/t/Dockerfile @@ -5,7 +5,7 @@ FROM docker.mgm.sipwise.com/sipwise-bullseye:latest # is updated with the current date. It will force refresh of all # of the base images and things like `apt-get update` won't be using # old cached versions when the Dockerfile is built. -ENV REFRESHED_AT 2022-01-19 +ENV REFRESHED_AT 2022-01-20 RUN apt-get update && apt-get install --assume-yes python3 python3-dev \ python3-pytest python3-pytest-pep8 \