views.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from __future__ import unicode_literals
  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, GRAPH_TYPE_PROVIDER
  10. from utilities.api import FieldChoicesViewSet, ModelViewSet
  11. from . import serializers
  12. #
  13. # Field choices
  14. #
  15. class CircuitsFieldChoicesViewSet(FieldChoicesViewSet):
  16. fields = (
  17. (Circuit, ['status']),
  18. (CircuitTermination, ['term_side']),
  19. )
  20. #
  21. # Providers
  22. #
  23. class ProviderViewSet(CustomFieldModelViewSet):
  24. queryset = Provider.objects.all()
  25. serializer_class = serializers.ProviderSerializer
  26. filter_class = filters.ProviderFilter
  27. @action(detail=True)
  28. def graphs(self, request, pk=None):
  29. """
  30. A convenience method for rendering graphs for a particular provider.
  31. """
  32. provider = get_object_or_404(Provider, pk=pk)
  33. queryset = Graph.objects.filter(type=GRAPH_TYPE_PROVIDER)
  34. serializer = RenderedGraphSerializer(queryset, many=True, context={'graphed_object': provider})
  35. return Response(serializer.data)
  36. #
  37. # Circuit Types
  38. #
  39. class CircuitTypeViewSet(ModelViewSet):
  40. queryset = CircuitType.objects.all()
  41. serializer_class = serializers.CircuitTypeSerializer
  42. filter_class = filters.CircuitTypeFilter
  43. #
  44. # Circuits
  45. #
  46. class CircuitViewSet(CustomFieldModelViewSet):
  47. queryset = Circuit.objects.select_related('type', 'tenant', 'provider')
  48. serializer_class = serializers.CircuitSerializer
  49. filter_class = filters.CircuitFilter
  50. #
  51. # Circuit Terminations
  52. #
  53. class CircuitTerminationViewSet(ModelViewSet):
  54. queryset = CircuitTermination.objects.select_related('circuit', 'site', 'interface__device')
  55. serializer_class = serializers.CircuitTerminationSerializer
  56. filter_class = filters.CircuitTerminationFilter