34
34
API_ROOT = settings .V3_API_ROOT_NO_FRONT_SLASH
35
35
if settings .API_ROOT_REWRITE_HEADER :
36
36
V3_API_ROOT = settings .V3_API_ROOT .replace ("/<path:api_root>/" , settings .API_ROOT )
37
+ V4_API_ROOT = settings .V4_API_ROOT .replace ("/<path:api_root>/" , settings .API_ROOT )
37
38
else :
38
39
V3_API_ROOT = settings .V3_API_ROOT
40
+ V4_API_ROOT = settings .V4_API_ROOT
39
41
40
42
41
43
class ViewSetNode :
@@ -174,45 +176,64 @@ class PulpDefaultRouter(routers.DefaultRouter):
174
176
),
175
177
]
176
178
177
- docs_and_status = [
178
- path ("livez/" , LivezView .as_view ()),
179
- path ("status/" , StatusView .as_view ()),
180
- path (
181
- "docs/api.json" ,
182
- SpectacularJSONAPIView .as_view (authentication_classes = [], permission_classes = []),
183
- name = "schema" ,
184
- ),
185
- path (
186
- "docs/api.yaml" ,
187
- SpectacularYAMLAPIView .as_view (authentication_classes = [], permission_classes = []),
188
- name = "schema-yaml" ,
189
- ),
190
- path (
191
- "docs/" ,
192
- SpectacularRedocView .as_view (
193
- authentication_classes = [],
194
- permission_classes = [],
195
- url = f"{ V3_API_ROOT } docs/api.json?include_html=1&pk_path=1" ,
179
+
180
+ def _docs_and_status (_api_root ):
181
+ paths = [
182
+ path (
183
+ "docs/api.json" ,
184
+ SpectacularJSONAPIView .as_view (authentication_classes = [], permission_classes = []),
185
+ name = "schema" ,
196
186
),
197
- name = "schema-redoc" ,
198
- ),
199
- path (
200
- "swagger/" ,
201
- SpectacularSwaggerView .as_view (
202
- authentication_classes = [],
203
- permission_classes = [],
204
- url = f"{ V3_API_ROOT } docs/api.json?include_html=1&pk_path=1" ,
187
+ path (
188
+ "docs/api.yaml" ,
189
+ SpectacularYAMLAPIView .as_view (authentication_classes = [], permission_classes = []),
190
+ name = "schema-yaml" ,
205
191
),
206
- name = "schema-swagger" ,
207
- ),
208
- ]
192
+ path (
193
+ "docs/" ,
194
+ SpectacularRedocView .as_view (
195
+ authentication_classes = [],
196
+ permission_classes = [],
197
+ url = f"{ _api_root } docs/api.json?include_html=1&pk_path=1" ,
198
+ ),
199
+ name = "schema-redoc" ,
200
+ ),
201
+ path (
202
+ "swagger/" ,
203
+ SpectacularSwaggerView .as_view (
204
+ authentication_classes = [],
205
+ permission_classes = [],
206
+ url = f"{ _api_root } docs/api.json?include_html=1&pk_path=1" ,
207
+ ),
208
+ name = "schema-swagger" ,
209
+ ),
210
+ path ("livez/" , LivezView .as_view (), name = "livez" ),
211
+ path ("status/" , StatusView .as_view (), name = "status" ),
212
+ ]
213
+
214
+ return paths
215
+
216
+
217
+ v3_docs_and_status = _docs_and_status (V3_API_ROOT )
218
+ v4_docs_and_status = _docs_and_status (V4_API_ROOT )
209
219
210
220
urlpatterns = [
211
- path (API_ROOT , include (special_views )),
212
221
path ("auth/" , include ("rest_framework.urls" )),
213
- path (settings .V3_API_ROOT_NO_FRONT_SLASH , include (docs_and_status )),
222
+ path (API_ROOT , include (special_views )),
223
+ path (settings .V3_API_ROOT_NO_FRONT_SLASH , include (v3_docs_and_status )),
214
224
]
215
225
226
+ if settings .ENABLE_V4_API :
227
+ urlpatterns .extend (
228
+ [
229
+ path (V4_API_ROOT , include ((special_views , "core" ), namespace = "v4" )),
230
+ path (
231
+ settings .V4_API_ROOT_NO_FRONT_SLASH ,
232
+ include ((v4_docs_and_status , "core" ), namespace = "v4" ),
233
+ ),
234
+ ]
235
+ )
236
+
216
237
if settings .DOMAIN_ENABLED :
217
238
# Ensure Docs and Status endpoints are available within domains, but are not shown in API schema
218
239
docs_and_status_no_schema = []
@@ -239,6 +260,10 @@ class NoSchema(p.callback.cls):
239
260
for router in all_routers :
240
261
urlpatterns .append (path (API_ROOT , include (router .urls )))
241
262
263
+ if settings .ENABLE_V4_API :
264
+ for router in all_routers :
265
+ urlpatterns .append (path (V4_API_ROOT , include ((router .urls , "core" ), namespace = "v4" )))
266
+
242
267
# If plugins define a urls.py, include them into the root namespace.
243
268
for plugin_pattern in plugin_patterns :
244
269
urlpatterns .append (path ("" , include (plugin_pattern )))
0 commit comments