views.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from rest_framework.routers import APIRootView
  2. from circuits.models import Circuit
  3. from dcim.models import Device, Rack, Site
  4. from ipam.models import IPAddress, Prefix, VLAN, VRF
  5. from netbox.api.viewsets import NetBoxModelViewSet
  6. from tenancy import filtersets
  7. from tenancy.models import *
  8. from utilities.utils import count_related
  9. from virtualization.models import VirtualMachine, Cluster
  10. from . import serializers
  11. class TenancyRootView(APIRootView):
  12. """
  13. Tenancy API root view
  14. """
  15. def get_view_name(self):
  16. return 'Tenancy'
  17. #
  18. # Tenants
  19. #
  20. class TenantGroupViewSet(NetBoxModelViewSet):
  21. queryset = TenantGroup.objects.add_related_count(
  22. TenantGroup.objects.all(),
  23. Tenant,
  24. 'group',
  25. 'tenant_count',
  26. cumulative=True
  27. ).prefetch_related('tags')
  28. serializer_class = serializers.TenantGroupSerializer
  29. filterset_class = filtersets.TenantGroupFilterSet
  30. class TenantViewSet(NetBoxModelViewSet):
  31. queryset = Tenant.objects.prefetch_related(
  32. 'group', 'tags'
  33. ).annotate(
  34. circuit_count=count_related(Circuit, 'tenant'),
  35. device_count=count_related(Device, 'tenant'),
  36. ipaddress_count=count_related(IPAddress, 'tenant'),
  37. prefix_count=count_related(Prefix, 'tenant'),
  38. rack_count=count_related(Rack, 'tenant'),
  39. site_count=count_related(Site, 'tenant'),
  40. virtualmachine_count=count_related(VirtualMachine, 'tenant'),
  41. vlan_count=count_related(VLAN, 'tenant'),
  42. vrf_count=count_related(VRF, 'tenant'),
  43. cluster_count=count_related(Cluster, 'tenant')
  44. )
  45. serializer_class = serializers.TenantSerializer
  46. filterset_class = filtersets.TenantFilterSet
  47. #
  48. # Contacts
  49. #
  50. class ContactGroupViewSet(NetBoxModelViewSet):
  51. queryset = ContactGroup.objects.add_related_count(
  52. ContactGroup.objects.all(),
  53. Contact,
  54. 'group',
  55. 'contact_count',
  56. cumulative=True
  57. ).prefetch_related('tags')
  58. serializer_class = serializers.ContactGroupSerializer
  59. filterset_class = filtersets.ContactGroupFilterSet
  60. class ContactRoleViewSet(NetBoxModelViewSet):
  61. queryset = ContactRole.objects.prefetch_related('tags')
  62. serializer_class = serializers.ContactRoleSerializer
  63. filterset_class = filtersets.ContactRoleFilterSet
  64. class ContactViewSet(NetBoxModelViewSet):
  65. queryset = Contact.objects.prefetch_related('group', 'tags')
  66. serializer_class = serializers.ContactSerializer
  67. filterset_class = filtersets.ContactFilterSet
  68. class ContactAssignmentViewSet(NetBoxModelViewSet):
  69. queryset = ContactAssignment.objects.prefetch_related('object', 'contact', 'role')
  70. serializer_class = serializers.ContactAssignmentSerializer
  71. filterset_class = filtersets.ContactAssignmentFilterSet