2019-04-12 17:07:56 -04:00
|
|
|
from django.db.models import Count
|
2017-11-07 11:08:23 -05:00
|
|
|
from django.shortcuts import get_object_or_404
|
2018-06-29 11:48:21 -04:00
|
|
|
from rest_framework.decorators import action
|
2017-01-30 17:00:58 -05:00
|
|
|
from rest_framework.response import Response
|
2017-01-26 17:18:41 -05:00
|
|
|
|
2017-02-01 15:01:56 -05:00
|
|
|
from circuits import filters
|
2017-01-26 17:18:41 -05:00
|
|
|
from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
|
2017-03-20 15:14:33 -04:00
|
|
|
from extras.api.serializers import RenderedGraphSerializer
|
2017-01-24 17:12:16 -05:00
|
|
|
from extras.api.views import CustomFieldModelViewSet
|
2019-12-06 10:32:59 -05:00
|
|
|
from extras.models import Graph
|
2017-11-07 15:36:10 -05:00
|
|
|
from utilities.api import FieldChoicesViewSet, ModelViewSet
|
2016-05-18 15:17:58 -04:00
|
|
|
from . import serializers
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-10-10 16:41:35 -04:00
|
|
|
#
|
|
|
|
# Field choices
|
|
|
|
#
|
|
|
|
|
|
|
|
class CircuitsFieldChoicesViewSet(FieldChoicesViewSet):
|
|
|
|
fields = (
|
2020-01-15 09:59:44 -05:00
|
|
|
(serializers.CircuitSerializer, ['status']),
|
|
|
|
(serializers.CircuitTerminationSerializer, ['term_side']),
|
2017-10-10 16:41:35 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2017-01-24 17:12:16 -05:00
|
|
|
#
|
|
|
|
# Providers
|
|
|
|
#
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class ProviderViewSet(CustomFieldModelViewSet):
|
2019-04-12 17:07:56 -04:00
|
|
|
queryset = Provider.objects.prefetch_related('tags').annotate(
|
|
|
|
circuit_count=Count('circuits')
|
|
|
|
)
|
2016-05-18 15:17:58 -04:00
|
|
|
serializer_class = serializers.ProviderSerializer
|
2020-01-09 20:25:33 -05:00
|
|
|
filterset_class = filters.ProviderFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2018-06-29 11:48:21 -04:00
|
|
|
@action(detail=True)
|
2019-09-18 15:59:52 -04:00
|
|
|
def graphs(self, request, pk):
|
2017-03-20 15:14:33 -04:00
|
|
|
"""
|
|
|
|
A convenience method for rendering graphs for a particular provider.
|
|
|
|
"""
|
2017-01-30 17:00:58 -05:00
|
|
|
provider = get_object_or_404(Provider, pk=pk)
|
2019-12-06 10:32:59 -05:00
|
|
|
queryset = Graph.objects.filter(type__model='provider')
|
2017-03-20 15:14:33 -04:00
|
|
|
serializer = RenderedGraphSerializer(queryset, many=True, context={'graphed_object': provider})
|
2017-01-30 17:00:58 -05:00
|
|
|
return Response(serializer.data)
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-24 17:12:16 -05:00
|
|
|
#
|
|
|
|
# Circuit Types
|
|
|
|
#
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-01-24 17:12:16 -05:00
|
|
|
class CircuitTypeViewSet(ModelViewSet):
|
2019-04-12 17:07:56 -04:00
|
|
|
queryset = CircuitType.objects.annotate(
|
|
|
|
circuit_count=Count('circuits')
|
|
|
|
)
|
2016-05-18 15:17:58 -04:00
|
|
|
serializer_class = serializers.CircuitTypeSerializer
|
2020-01-09 20:25:33 -05:00
|
|
|
filterset_class = filters.CircuitTypeFilterSet
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2017-01-24 17:12:16 -05:00
|
|
|
#
|
|
|
|
# Circuits
|
|
|
|
#
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class CircuitViewSet(CustomFieldModelViewSet):
|
2019-08-19 01:53:39 -04:00
|
|
|
queryset = Circuit.objects.prefetch_related('type', 'tenant', 'provider').prefetch_related('tags')
|
2017-01-27 14:36:13 -05:00
|
|
|
serializer_class = serializers.CircuitSerializer
|
2020-01-09 20:25:33 -05:00
|
|
|
filterset_class = filters.CircuitFilterSet
|
2017-01-26 15:33:41 -05:00
|
|
|
|
2017-01-26 17:18:41 -05:00
|
|
|
|
|
|
|
#
|
|
|
|
# Circuit Terminations
|
|
|
|
#
|
|
|
|
|
2017-11-07 15:36:10 -05:00
|
|
|
class CircuitTerminationViewSet(ModelViewSet):
|
2019-08-19 01:53:39 -04:00
|
|
|
queryset = CircuitTermination.objects.prefetch_related(
|
2018-11-05 13:53:22 -05:00
|
|
|
'circuit', 'site', 'connected_endpoint__device', 'cable'
|
|
|
|
)
|
2017-01-26 17:18:41 -05:00
|
|
|
serializer_class = serializers.CircuitTerminationSerializer
|
2020-01-09 20:25:33 -05:00
|
|
|
filterset_class = filters.CircuitTerminationFilterSet
|