views.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.shortcuts import get_object_or_404
  2. from rest_framework.decorators import detail_route
  3. from rest_framework.response import Response
  4. from rest_framework.viewsets import ModelViewSet
  5. from circuits import filters
  6. from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
  7. from extras.models import Graph, GRAPH_TYPE_PROVIDER
  8. from extras.api.serializers import GraphSerializer
  9. from extras.api.views import CustomFieldModelViewSet
  10. from utilities.api import WritableSerializerMixin
  11. from . import serializers
  12. #
  13. # Providers
  14. #
  15. class ProviderViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  16. queryset = Provider.objects.all()
  17. serializer_class = serializers.ProviderSerializer
  18. write_serializer_class = serializers.WritableProviderSerializer
  19. filter_class = filters.ProviderFilter
  20. @detail_route()
  21. def graphs(self, request, pk=None):
  22. provider = get_object_or_404(Provider, pk=pk)
  23. queryset = Graph.objects.filter(type=GRAPH_TYPE_PROVIDER)
  24. serializer = GraphSerializer(queryset, many=True, context={'graphed_object': provider})
  25. return Response(serializer.data)
  26. #
  27. # Circuit Types
  28. #
  29. class CircuitTypeViewSet(ModelViewSet):
  30. queryset = CircuitType.objects.all()
  31. serializer_class = serializers.CircuitTypeSerializer
  32. #
  33. # Circuits
  34. #
  35. class CircuitViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  36. queryset = Circuit.objects.select_related('type', 'tenant', 'provider')
  37. serializer_class = serializers.CircuitSerializer
  38. write_serializer_class = serializers.WritableCircuitSerializer
  39. filter_class = filters.CircuitFilter
  40. #
  41. # Circuit Terminations
  42. #
  43. class CircuitTerminationViewSet(WritableSerializerMixin, ModelViewSet):
  44. queryset = CircuitTermination.objects.select_related('circuit', 'site', 'interface__device')
  45. serializer_class = serializers.CircuitTerminationSerializer
  46. write_serializer_class = serializers.WritableCircuitTerminationSerializer
  47. filter_class = filters.CircuitTerminationFilter