Skip to content

Commit 04a9e62

Browse files
committed
Add drf-yasg as a replacement of deprecated coreapi for API documentation #313
Signed-off-by: tdruez <tdruez@nexb.com>
1 parent 14eb7e8 commit 04a9e62

File tree

6 files changed

+24
-14
lines changed

6 files changed

+24
-14
lines changed

dejacode/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ def gettext_noop(s):
317317
"django.contrib.admin",
318318
"rest_framework",
319319
"rest_framework.authtoken",
320+
"drf_yasg",
320321
"django_rq",
321322
"crispy_forms",
322323
"crispy_bootstrap5",
@@ -625,7 +626,6 @@ def get_fake_redis_connection(config, use_strict_redis):
625626
"user": REST_API_RATE_THROTTLE,
626627
},
627628
"DEFAULT_PAGINATION_CLASS": "dje.api_custom.PageSizePagination",
628-
"DEFAULT_SCHEMA_CLASS": "rest_framework.schemas.coreapi.AutoSchema",
629629
"VIEW_NAME_FUNCTION": "dje.api_custom.get_view_name",
630630
"URL_FIELD_NAME": "api_url", # Default 'url' used as a field on the Package model
631631
}

dejacode/urls.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
from django.conf.urls import include
1111
from django.contrib import admin
1212
from django.contrib.auth import views as auth_views
13-
from django.contrib.auth.decorators import login_required
1413
from django.template.loader import render_to_string
1514
from django.urls import path
1615
from django.views.defaults import page_not_found
1716
from django.views.generic import RedirectView
1817
from django.views.generic import TemplateView
1918

19+
from drf_yasg import openapi
20+
from drf_yasg.views import get_schema_view
2021
from notifications.views import mark_all_as_read
21-
from rest_framework.documentation import include_docs_urls
2222
from rest_framework.routers import DefaultRouter
2323

2424
from component_catalog.api import ComponentViewSet
@@ -167,22 +167,28 @@
167167
path("purldb/", include(("purldb.urls", "purldb"))),
168168
]
169169

170-
api_docs_urls = include_docs_urls(
171-
title="DejaCode REST API",
172-
public=False,
173-
description=render_to_string(
174-
"rest_framework/docs/description.html",
175-
context={"site_url": settings.SITE_URL.rstrip("/")},
170+
api_docs_view = get_schema_view(
171+
openapi.Info(
172+
title="DejaCode REST API",
173+
default_version="v2",
174+
description=render_to_string(
175+
"rest_framework/docs/description.html",
176+
context={"site_url": settings.SITE_URL.rstrip("/")},
177+
),
176178
),
179+
public=False,
177180
)
178181

179-
# Force login_required on all API documentation URLs.
180-
for doc_url in api_docs_urls[0]:
181-
doc_url.callback = login_required(doc_url.callback)
182+
# TODO: Force login_required on all API documentation URLs.
183+
# for doc_url in api_docs_urls[0]:
184+
# doc_url.callback = login_required(doc_url.callback)
185+
api_docs_patterns = [
186+
path("", api_docs_view.with_ui("redoc", cache_timeout=0), name="docs-index"),
187+
]
182188

183189
urlpatterns += [
184190
path("api/v2/", include((api_router.urls, "api_v2"))),
185-
path("api/v2/docs/", api_docs_urls),
191+
path("api/v2/docs/", include((api_docs_patterns, "api-docs"))),
186192
]
187193

188194
if settings.ENABLE_SELF_REGISTRATION:

setup.cfg

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,11 @@ install_requires =
7070
django_altcha==0.1.3
7171
# REST API
7272
djangorestframework==3.16.0
73-
# API documentation, `coreapi` and its requirements:
73+
# API documentation
74+
drf-yasg==1.21.10
75+
inflection==0.5.1
76+
pytz==2025.2
77+
# Old API documentation, `coreapi` and its requirements:
7478
coreapi==2.3.3
7579
MarkupSafe==3.0.2
7680
coreschema==0.0.4
4.09 MB
Binary file not shown.
9.23 KB
Binary file not shown.
497 KB
Binary file not shown.

0 commit comments

Comments
 (0)