views.py 2.0 KB

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