views.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from __future__ import unicode_literals
  2. from rest_framework.decorators import detail_route
  3. from rest_framework.response import Response
  4. from rest_framework.viewsets import ModelViewSet
  5. from django.shortcuts import get_object_or_404
  6. from circuits import filters
  7. from circuits.models import Provider, CircuitTermination, CircuitType, Circuit
  8. from extras.models import Graph, GRAPH_TYPE_PROVIDER
  9. from extras.api.serializers import RenderedGraphSerializer
  10. from extras.api.views import CustomFieldModelViewSet
  11. from utilities.api import WritableSerializerMixin
  12. from . import serializers
  13. #
  14. # Providers
  15. #
  16. class ProviderViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  17. queryset = Provider.objects.all()
  18. serializer_class = serializers.ProviderSerializer
  19. write_serializer_class = serializers.WritableProviderSerializer
  20. filter_class = filters.ProviderFilter
  21. @detail_route()
  22. def graphs(self, request, pk=None):
  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=GRAPH_TYPE_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.all()
  35. serializer_class = serializers.CircuitTypeSerializer
  36. filter_class = filters.CircuitTypeFilter
  37. #
  38. # Circuits
  39. #
  40. class CircuitViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
  41. queryset = Circuit.objects.select_related('type', 'tenant', 'provider')
  42. serializer_class = serializers.CircuitSerializer
  43. write_serializer_class = serializers.WritableCircuitSerializer
  44. filter_class = filters.CircuitFilter
  45. #
  46. # Circuit Terminations
  47. #
  48. class CircuitTerminationViewSet(WritableSerializerMixin, ModelViewSet):
  49. queryset = CircuitTermination.objects.select_related('circuit', 'site', 'interface__device')
  50. serializer_class = serializers.CircuitTerminationSerializer
  51. write_serializer_class = serializers.WritableCircuitTerminationSerializer
  52. filter_class = filters.CircuitTerminationFilter