views.py 2.2 KB

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