views.py 1.8 KB

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