Browse Source

Added an endpoint for CircuitTerminations

Jeremy Stretch 8 years ago
parent
commit
b8ca530c55
2 changed files with 32 additions and 15 deletions
  1. 8 4
      netbox/circuits/api/urls.py
  2. 24 11
      netbox/circuits/api/views.py

+ 8 - 4
netbox/circuits/api/urls.py

@@ -5,13 +5,14 @@ from rest_framework import routers
 from extras.models import GRAPH_TYPE_PROVIDER
 from extras.api.views import GraphListView
 
-from .views import CircuitViewSet, CircuitTypeViewSet, ProviderViewSet
+from . import views
 
 
 router = routers.DefaultRouter()
-router.register(r'providers', ProviderViewSet)
-router.register(r'circuit-types', CircuitTypeViewSet)
-router.register(r'circuits', CircuitViewSet)
+router.register(r'providers', views.ProviderViewSet)
+router.register(r'circuit-types', views.CircuitTypeViewSet)
+router.register(r'circuits', views.CircuitViewSet)
+router.register(r'circuit-terminations', views.CircuitTerminationViewSet)
 
 urlpatterns = [
 
@@ -21,4 +22,7 @@ urlpatterns = [
     url(r'^providers/(?P<pk>\d+)/graphs/$', GraphListView.as_view(), {'type': GRAPH_TYPE_PROVIDER},
         name='provider_graphs'),
 
+    # Circuits
+    url(r'^circuits/(?P<pk>\d+)/terminations/$', views.NestedCircuitTerminationViewSet.as_view({'get': 'list'})),
+
 ]

+ 24 - 11
netbox/circuits/api/views.py

@@ -1,6 +1,11 @@
-from rest_framework.viewsets import ModelViewSet
+from django.shortcuts import get_object_or_404
 
-from circuits.models import Provider, CircuitType, Circuit
+from rest_framework.mixins import (
+    CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin,
+)
+from rest_framework.viewsets import GenericViewSet, ModelViewSet
+
+from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
 from circuits.filters import CircuitFilter
 
 from extras.api.views import CustomFieldModelViewSet
@@ -12,9 +17,6 @@ from . import serializers
 #
 
 class ProviderViewSet(CustomFieldModelViewSet):
-    """
-    List and retrieve circuit providers
-    """
     queryset = Provider.objects.all()
     serializer_class = serializers.ProviderSerializer
 
@@ -24,9 +26,6 @@ class ProviderViewSet(CustomFieldModelViewSet):
 #
 
 class CircuitTypeViewSet(ModelViewSet):
-    """
-    List and retrieve circuit types
-    """
     queryset = CircuitType.objects.all()
     serializer_class = serializers.CircuitTypeSerializer
 
@@ -36,9 +35,6 @@ class CircuitTypeViewSet(ModelViewSet):
 #
 
 class CircuitViewSet(CustomFieldModelViewSet):
-    """
-    List and retrieve circuits
-    """
     queryset = Circuit.objects.select_related('type', 'tenant', 'provider')
     filter_class = CircuitFilter
 
@@ -46,3 +42,20 @@ class CircuitViewSet(CustomFieldModelViewSet):
         if self.action == 'retrieve':
             return serializers.CircuitDetailSerializer
         return serializers.CircuitSerializer
+
+
+class NestedCircuitTerminationViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
+    serializer_class = serializers.CircuitTerminationSerializer
+
+    def get_queryset(self):
+        circuit = get_object_or_404(Circuit, pk=self.kwargs['pk'])
+        return CircuitTermination.objects.filter(circuit=circuit).select_related('site', 'interface__device')
+
+
+#
+# Circuit Terminations
+#
+
+class CircuitTerminationViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, GenericViewSet):
+    queryset = CircuitTermination.objects.select_related('site', 'interface__device')
+    serializer_class = serializers.CircuitTerminationSerializer