2
0

views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.db.models import Count
  2. from django.shortcuts import get_object_or_404
  3. from rest_framework.decorators import action
  4. from rest_framework.response import Response
  5. from circuits import filters
  6. from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
  7. from extras.api.serializers import RenderedGraphSerializer
  8. from extras.api.views import CustomFieldModelViewSet
  9. from extras.models import Graph
  10. from utilities.api import ModelViewSet
  11. from . import serializers
  12. #
  13. # Providers
  14. #
  15. class ProviderViewSet(CustomFieldModelViewSet):
  16. queryset = Provider.objects.prefetch_related('tags').annotate(
  17. circuit_count=Count('circuits')
  18. )
  19. serializer_class = serializers.ProviderSerializer
  20. filterset_class = filters.ProviderFilterSet
  21. @action(detail=True)
  22. def graphs(self, request, pk):
  23. """
  24. A convenience method for rendering graphs for a particular provider.
  25. """
  26. provider = get_object_or_404(Provider, pk=pk)
  27. queryset = Graph.objects.filter(type__model='provider')
  28. serializer = RenderedGraphSerializer(queryset, many=True, context={'graphed_object': provider})
  29. return Response(serializer.data)
  30. #
  31. # Circuit Types
  32. #
  33. class CircuitTypeViewSet(ModelViewSet):
  34. queryset = CircuitType.objects.annotate(
  35. circuit_count=Count('circuits')
  36. )
  37. serializer_class = serializers.CircuitTypeSerializer
  38. filterset_class = filters.CircuitTypeFilterSet
  39. #
  40. # Circuits
  41. #
  42. class CircuitViewSet(CustomFieldModelViewSet):
  43. queryset = Circuit.objects.prefetch_related(
  44. 'type', 'tenant', 'provider', 'terminations__site', 'terminations__connected_endpoint__device'
  45. ).prefetch_related('tags')
  46. serializer_class = serializers.CircuitSerializer
  47. filterset_class = filters.CircuitFilterSet
  48. #
  49. # Circuit Terminations
  50. #
  51. class CircuitTerminationViewSet(ModelViewSet):
  52. queryset = CircuitTermination.objects.prefetch_related(
  53. 'circuit', 'site', 'connected_endpoint__device', 'cable'
  54. )
  55. serializer_class = serializers.CircuitTerminationSerializer
  56. filterset_class = filters.CircuitTerminationFilterSet