Selaa lähdekoodia

Rename OrderedDefaultRouter to NetBoxRouter & document for plugins

jeremystretch 3 vuotta sitten
vanhempi
commit
59aba52b03

+ 2 - 2
docs/plugins/development/rest-api.md

@@ -70,10 +70,10 @@ Routers should be exposed in `api/urls.py`. This file **must** define a variable
 
 ```python
 # api/urls.py
-from rest_framework import routers
+from netbox.api.routers import NetBoxRouter
 from .views import MyModelViewSet
 
-router = routers.DefaultRouter()
+router = NetBoxRouter()
 router.register('my-model', MyModelViewSet)
 urlpatterns = router.urls
 ```

+ 2 - 2
netbox/circuits/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.CircuitsRootView
 
 # Providers

+ 2 - 2
netbox/dcim/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.DCIMRootView
 
 # Sites

+ 2 - 2
netbox/extras/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.ExtrasRootView
 
 # Webhooks

+ 2 - 2
netbox/ipam/api/urls.py

@@ -1,11 +1,11 @@
 from django.urls import path
 
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from ipam.models import IPRange, Prefix
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.IPAMRootView
 
 # ASNs

+ 2 - 2
netbox/netbox/api/__init__.py

@@ -1,5 +1,5 @@
 from .fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
-from .routers import OrderedDefaultRouter
+from .routers import NetBoxRouter
 from .serializers import BulkOperationSerializer, ValidatedModelSerializer, WritableNestedSerializer
 
 
@@ -7,7 +7,7 @@ __all__ = (
     'BulkOperationSerializer',
     'ChoiceField',
     'ContentTypeField',
-    'OrderedDefaultRouter',
+    'NetBoxRouter',
     'SerializedPKRelatedField',
     'ValidatedModelSerializer',
     'WritableNestedSerializer',

+ 8 - 6
netbox/netbox/api/routers.py

@@ -1,14 +1,16 @@
-from collections import OrderedDict
-
 from rest_framework.routers import DefaultRouter
 
 
-class OrderedDefaultRouter(DefaultRouter):
-
+class NetBoxRouter(DefaultRouter):
+    """
+    Extend DRF's built-in DefaultRouter to:
+    1. Support bulk operations
+    2. Alphabetically order endpoints under the root view
+    """
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
 
-        # Extend the list view mappings to support the DELETE operation
+        # Update the list view mappings to support bulk operations
         self.routes[0].mapping.update({
             'put': 'bulk_update',
             'patch': 'bulk_partial_update',
@@ -19,7 +21,7 @@ class OrderedDefaultRouter(DefaultRouter):
         """
         Wrap DRF's DefaultRouter to return an alphabetized list of endpoints.
         """
-        api_root_dict = OrderedDict()
+        api_root_dict = {}
         list_name = self.routes[0].name
         for prefix, viewset, basename in sorted(self.registry, key=lambda x: x[0]):
             api_root_dict[prefix] = list_name.format(basename=basename)

+ 2 - 2
netbox/tenancy/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.TenancyRootView
 
 # Tenants

+ 2 - 2
netbox/users/api/urls.py

@@ -1,10 +1,10 @@
 from django.urls import include, path
 
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.UsersRootView
 
 # Users and groups

+ 2 - 2
netbox/virtualization/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.VirtualizationRootView
 
 # Clusters

+ 2 - 2
netbox/wireless/api/urls.py

@@ -1,8 +1,8 @@
-from netbox.api import OrderedDefaultRouter
+from netbox.api import NetBoxRouter
 from . import views
 
 
-router = OrderedDefaultRouter()
+router = NetBoxRouter()
 router.APIRootView = views.WirelessRootView
 
 router.register('wireless-lan-groups', views.WirelessLANGroupViewSet)