views.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from rest_framework.routers import APIRootView
  2. from circuits import filters
  3. from circuits.models import *
  4. from dcim.api.views import PassThroughPortMixin
  5. from extras.api.views import CustomFieldModelViewSet
  6. from netbox.api.views import ModelViewSet
  7. from utilities.utils import count_related
  8. from . import serializers
  9. class CircuitsRootView(APIRootView):
  10. """
  11. Circuits API root view
  12. """
  13. def get_view_name(self):
  14. return 'Circuits'
  15. #
  16. # Providers
  17. #
  18. class ProviderViewSet(CustomFieldModelViewSet):
  19. queryset = Provider.objects.prefetch_related('tags').annotate(
  20. circuit_count=count_related(Circuit, 'provider')
  21. )
  22. serializer_class = serializers.ProviderSerializer
  23. filterset_class = filters.ProviderFilterSet
  24. #
  25. # Circuit Types
  26. #
  27. class CircuitTypeViewSet(CustomFieldModelViewSet):
  28. queryset = CircuitType.objects.annotate(
  29. circuit_count=count_related(Circuit, 'type')
  30. )
  31. serializer_class = serializers.CircuitTypeSerializer
  32. filterset_class = filters.CircuitTypeFilterSet
  33. #
  34. # Circuits
  35. #
  36. class CircuitViewSet(CustomFieldModelViewSet):
  37. queryset = Circuit.objects.prefetch_related(
  38. 'type', 'tenant', 'provider', 'termination_a', 'termination_z'
  39. ).prefetch_related('tags')
  40. serializer_class = serializers.CircuitSerializer
  41. filterset_class = filters.CircuitFilterSet
  42. #
  43. # Circuit Terminations
  44. #
  45. class CircuitTerminationViewSet(PassThroughPortMixin, ModelViewSet):
  46. queryset = CircuitTermination.objects.prefetch_related(
  47. 'circuit', 'site', 'provider_network', 'cable'
  48. )
  49. serializer_class = serializers.CircuitTerminationSerializer
  50. filterset_class = filters.CircuitTerminationFilterSet
  51. brief_prefetch_fields = ['circuit']
  52. #
  53. # Provider networks
  54. #
  55. class ProviderNetworkViewSet(CustomFieldModelViewSet):
  56. queryset = ProviderNetwork.objects.prefetch_related('tags')
  57. serializer_class = serializers.ProviderNetworkSerializer
  58. filterset_class = filters.ProviderNetworkFilterSet