Răsfoiți Sursa

utilities: add converters module and use for json/yaml url

hellerve 6 ani în urmă
părinte
comite
b114b9d396
2 a modificat fișierele cu 14 adăugiri și 3 ștergeri
  1. 6 3
      netbox/netbox/urls.py
  2. 8 0
      netbox/utilities/converters.py

+ 6 - 3
netbox/netbox/urls.py

@@ -1,14 +1,17 @@
 from django.conf import settings
-from django.conf.urls import include, url
-from django.urls import path
+from django.conf.urls import include
+from django.urls import path, register_converter
 from django.views.static import serve
 from drf_yasg import openapi
 from drf_yasg.views import get_schema_view
 
 from netbox.views import APIRootView, HomeView, SearchView
 from users.views import LoginView, LogoutView
+from utilities import converters
 from .admin import admin_site
 
+register_converter(converters.JSONOrYAMLConverter, 'json_or_yaml')
+
 schema_view = get_schema_view(
     openapi.Info(
         title="NetBox API",
@@ -53,7 +56,7 @@ _patterns = [
     path(r'api/virtualization/', include('virtualization.api.urls')),
     path(r'api/docs/', schema_view.with_ui('swagger'), name='api_docs'),
     path(r'api/redoc/', schema_view.with_ui('redoc'), name='api_redocs'),
-    url(r'api/swagger(?P<format>.json|.yaml)', schema_view.without_ui(), name='schema_swagger'),
+    path(r'api/swagger<json_or_yaml:format>', schema_view.without_ui(), name='schema_swagger'),
 
     # Serving static media in Django to pipe it through LoginRequiredMiddleware
     path(r'media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),

+ 8 - 0
netbox/utilities/converters.py

@@ -0,0 +1,8 @@
+class JSONOrYAMLConverter:
+    regex = '.json|.yaml'
+
+    def to_python(self, value):
+        return value
+
+    def to_url(self, value):
+        return value