diff --git a/netbox/circuits/api/urls.py b/netbox/circuits/api/urls.py index 58c370449..0dd2d2a94 100644 --- a/netbox/circuits/api/urls.py +++ b/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\d+)/graphs/$', GraphListView.as_view(), {'type': GRAPH_TYPE_PROVIDER}, name='provider_graphs'), + # Circuits + url(r'^circuits/(?P\d+)/terminations/$', views.NestedCircuitTerminationViewSet.as_view({'get': 'list'})), + ] diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index ec1f1c8ac..757cc2e26 100644 --- a/netbox/circuits/api/views.py +++ b/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