diff --git a/requirements.txt b/requirements.txt
index 2c821b9eb..124cd29e6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -13,7 +13,7 @@ Django==3.0.7
django-filter==2.2.0
djangorestframework==3.11.0
django-widget-tweaks==1.4.8
-drf-yasg==1.17.1
+drf-spectacular==0.13.0
gunicorn==19.7.1
importlib-metadata==1.3.0
ipython==7.13.0
diff --git a/vulnerabilities/templates/base.html b/vulnerabilities/templates/base.html
index 706d1865d..21ed49efd 100644
--- a/vulnerabilities/templates/base.html
+++ b/vulnerabilities/templates/base.html
@@ -14,7 +14,7 @@
Home
-
+
API Docs
diff --git a/vulnerablecode/settings.py b/vulnerablecode/settings.py
index 9b51a31a5..9fcf16d73 100644
--- a/vulnerablecode/settings.py
+++ b/vulnerablecode/settings.py
@@ -48,7 +48,7 @@
'rest_framework',
'django_filters',
'widget_tweaks',
- 'drf_yasg',
+ 'drf_spectacular',
]
MIDDLEWARE = [
@@ -159,8 +159,15 @@
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100,
+ 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
+SPECTACULAR_SETTINGS = {
+ 'SERVE_INCLUDE_SCHEMA': False,
+ 'TITLE': "VulnerableCode API"
+}
+# TODO: Specify the license for the API here.
+
# Set `DJANGO_DEV=1` in env to enable dev mode
if DEV_MODE:
diff --git a/vulnerablecode/urls.py b/vulnerablecode/urls.py
index 049f6b169..e8762a480 100644
--- a/vulnerablecode/urls.py
+++ b/vulnerablecode/urls.py
@@ -23,11 +23,11 @@
from django.contrib import admin
from django.urls import include, path
+from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from rest_framework import permissions
-from drf_yasg.views import get_schema_view
-from drf_yasg import openapi
from rest_framework.routers import DefaultRouter
+
from vulnerabilities.api import PackageViewSet
from vulnerabilities.api import VulnerabilityViewSet
from vulnerabilities.views import HomePage
@@ -41,12 +41,6 @@
from vulnerabilities.views import VulnerabilityCreate
from vulnerabilities.views import VulnerabilityReferenceCreate
-schema_view = get_schema_view(
- openapi.Info(title="VulnerableCode API", default_version="v1"),
- public=True,
- permission_classes=(permissions.AllowAny,),
-)
-
api_router = DefaultRouter()
api_router.register(r"packages", PackageViewSet)
# `DefaultRouter` requires `basename` when registering viewsets which don't
@@ -56,6 +50,8 @@
urlpatterns = [
path("admin/", admin.site.urls),
+ path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
+ path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(), name='swagger-ui'),
path("packages/search", PackageSearchView.as_view(), name="package_search"),
path("packages/", PackageUpdate.as_view(), name="package_view"),
path("vulnerabilities/", VulnerabilityDetails.as_view(), name="vulnerability_view"),
@@ -88,6 +84,5 @@
name="vulnerability_reference_create",
),
path("", HomePage.as_view(), name="home"),
- path(r"api/", include(api_router.urls)),
- path(r"api/docs", schema_view.with_ui("swagger", cache_timeout=0), name="schema-swagger-ui"),
+ path(r"api/", include(api_router.urls))
]