diff --git a/netbox/circuits/api/serializers.py b/netbox/circuits/api/serializers.py index ec6d6a18a..b15e735eb 100644 --- a/netbox/circuits/api/serializers.py +++ b/netbox/circuits/api/serializers.py @@ -57,19 +57,6 @@ class NestedCircuitTypeSerializer(serializers.ModelSerializer): fields = ['id', 'url', 'name', 'slug'] -# -# Circuit Terminations -# - -class CircuitTerminationSerializer(serializers.ModelSerializer): - site = NestedSiteSerializer() - interface = InterfaceSerializer() - - class Meta: - model = CircuitTermination - fields = ['id', 'term_side', 'site', 'interface', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info'] - - # # Circuits # @@ -103,3 +90,28 @@ class WritableCircuitSerializer(serializers.ModelSerializer): fields = [ 'id', 'cid', 'provider', 'type', 'tenant', 'install_date', 'commit_rate', 'description', 'comments', ] + + +# +# Circuit Terminations +# + +class CircuitTerminationSerializer(serializers.ModelSerializer): + circuit = NestedCircuitSerializer() + site = NestedSiteSerializer() + interface = InterfaceSerializer() + + class Meta: + model = CircuitTermination + fields = [ + 'id', 'circuit', 'term_side', 'site', 'interface', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', + ] + + +class WritableCircuitTerminationSerializer(serializers.ModelSerializer): + + class Meta: + model = CircuitTermination + fields = [ + 'id', 'circuit', 'term_side', 'site', 'interface', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', + ] diff --git a/netbox/circuits/api/urls.py b/netbox/circuits/api/urls.py index 59739e510..6bb49dc38 100644 --- a/netbox/circuits/api/urls.py +++ b/netbox/circuits/api/urls.py @@ -15,7 +15,4 @@ urlpatterns = [ url(r'', include(router.urls)), - # 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 97d619fd2..c8aa7b010 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -1,15 +1,11 @@ from django.shortcuts import get_object_or_404 from rest_framework.decorators import detail_route -from rest_framework.mixins import ( - CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, -) from rest_framework.response import Response -from rest_framework.viewsets import GenericViewSet, ModelViewSet +from rest_framework.viewsets import ModelViewSet +from circuits import filters from circuits.models import Provider, CircuitTermination, CircuitType, Circuit -from circuits.filters import CircuitFilter - from extras.models import Graph, GRAPH_TYPE_PROVIDER from extras.api.serializers import GraphSerializer from extras.api.views import CustomFieldModelViewSet @@ -25,6 +21,7 @@ class ProviderViewSet(WritableSerializerMixin, CustomFieldModelViewSet): queryset = Provider.objects.all() serializer_class = serializers.ProviderSerializer write_serializer_class = serializers.WritableProviderSerializer + filter_class = filters.ProviderFilter @detail_route() def graphs(self, request, pk=None): @@ -51,22 +48,15 @@ class CircuitViewSet(WritableSerializerMixin, CustomFieldModelViewSet): queryset = Circuit.objects.select_related('type', 'tenant', 'provider') serializer_class = serializers.CircuitSerializer write_serializer_class = serializers.WritableCircuitSerializer - filter_class = CircuitFilter + filter_class = filters.CircuitFilter # # Circuit Terminations # -class CircuitTerminationViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, WritableSerializerMixin, - GenericViewSet): - queryset = CircuitTermination.objects.select_related('site', 'interface__device') +class CircuitTerminationViewSet(WritableSerializerMixin, ModelViewSet): + queryset = CircuitTermination.objects.select_related('circuit', 'site', 'interface__device') serializer_class = serializers.CircuitTerminationSerializer - - -class NestedCircuitTerminationViewSet(CreateModelMixin, ListModelMixin ,WritableSerializerMixin, 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') + write_serializer_class = serializers.WritableCircuitTerminationSerializer + filter_class = filters.CircuitTerminationFilter diff --git a/netbox/circuits/filters.py b/netbox/circuits/filters.py index fa57a74dc..a920ae55c 100644 --- a/netbox/circuits/filters.py +++ b/netbox/circuits/filters.py @@ -6,8 +6,7 @@ from dcim.models import Site from extras.filters import CustomFieldFilterSet from tenancy.models import Tenant from utilities.filters import NullableModelMultipleChoiceFilter - -from .models import Provider, Circuit, CircuitType +from .models import Provider, Circuit, CircuitTermination, CircuitType class ProviderFilter(CustomFieldFilterSet, django_filters.FilterSet): @@ -101,3 +100,15 @@ class CircuitFilter(CustomFieldFilterSet, django_filters.FilterSet): Q(description__icontains=value) | Q(comments__icontains=value) ).distinct() + + +class CircuitTerminationFilter(django_filters.FilterSet): + circuit_id = django_filters.ModelMultipleChoiceFilter( + name='circuit', + queryset=Circuit.objects.all(), + label='Circuit', + ) + + class Meta: + model = CircuitTermination + fields = ['term_side', 'site']