configcontexts.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from rest_framework import serializers
  2. from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer
  3. from dcim.api.serializers_.devicetypes import DeviceTypeSerializer
  4. from dcim.api.serializers_.platforms import PlatformSerializer
  5. from dcim.api.serializers_.roles import DeviceRoleSerializer
  6. from dcim.api.serializers_.sites import LocationSerializer, RegionSerializer, SiteSerializer, SiteGroupSerializer
  7. from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
  8. from extras.models import ConfigContext, ConfigContextProfile, Tag
  9. from netbox.api.fields import SerializedPKRelatedField
  10. from netbox.api.serializers import ChangeLogMessageSerializer, PrimaryModelSerializer, ValidatedModelSerializer
  11. from users.api.serializers_.mixins import OwnerMixin
  12. from tenancy.api.serializers_.tenants import TenantSerializer, TenantGroupSerializer
  13. from tenancy.models import Tenant, TenantGroup
  14. from virtualization.api.serializers_.clusters import ClusterSerializer, ClusterGroupSerializer, ClusterTypeSerializer
  15. from virtualization.models import Cluster, ClusterGroup, ClusterType
  16. __all__ = (
  17. 'ConfigContextProfileSerializer',
  18. 'ConfigContextSerializer',
  19. )
  20. class ConfigContextProfileSerializer(PrimaryModelSerializer):
  21. data_source = DataSourceSerializer(
  22. nested=True,
  23. required=False
  24. )
  25. data_file = DataFileSerializer(
  26. nested=True,
  27. required=False
  28. )
  29. class Meta:
  30. model = ConfigContextProfile
  31. fields = [
  32. 'id', 'url', 'display_url', 'display', 'name', 'description', 'schema', 'tags', 'owner', 'comments',
  33. 'data_source', 'data_path', 'data_file', 'data_synced', 'created', 'last_updated',
  34. ]
  35. brief_fields = ('id', 'url', 'display', 'name', 'description')
  36. class ConfigContextSerializer(OwnerMixin, ChangeLogMessageSerializer, ValidatedModelSerializer):
  37. profile = ConfigContextProfileSerializer(
  38. nested=True,
  39. required=False,
  40. allow_null=True,
  41. default=None,
  42. )
  43. regions = SerializedPKRelatedField(
  44. queryset=Region.objects.all(),
  45. serializer=RegionSerializer,
  46. nested=True,
  47. required=False,
  48. many=True
  49. )
  50. site_groups = SerializedPKRelatedField(
  51. queryset=SiteGroup.objects.all(),
  52. serializer=SiteGroupSerializer,
  53. nested=True,
  54. required=False,
  55. many=True
  56. )
  57. sites = SerializedPKRelatedField(
  58. queryset=Site.objects.all(),
  59. serializer=SiteSerializer,
  60. nested=True,
  61. required=False,
  62. many=True
  63. )
  64. locations = SerializedPKRelatedField(
  65. queryset=Location.objects.all(),
  66. serializer=LocationSerializer,
  67. nested=True,
  68. required=False,
  69. many=True
  70. )
  71. device_types = SerializedPKRelatedField(
  72. queryset=DeviceType.objects.all(),
  73. serializer=DeviceTypeSerializer,
  74. nested=True,
  75. required=False,
  76. many=True
  77. )
  78. roles = SerializedPKRelatedField(
  79. queryset=DeviceRole.objects.all(),
  80. serializer=DeviceRoleSerializer,
  81. nested=True,
  82. required=False,
  83. many=True
  84. )
  85. platforms = SerializedPKRelatedField(
  86. queryset=Platform.objects.all(),
  87. serializer=PlatformSerializer,
  88. nested=True,
  89. required=False,
  90. many=True
  91. )
  92. cluster_types = SerializedPKRelatedField(
  93. queryset=ClusterType.objects.all(),
  94. serializer=ClusterTypeSerializer,
  95. nested=True,
  96. required=False,
  97. many=True
  98. )
  99. cluster_groups = SerializedPKRelatedField(
  100. queryset=ClusterGroup.objects.all(),
  101. serializer=ClusterGroupSerializer,
  102. nested=True,
  103. required=False,
  104. many=True
  105. )
  106. clusters = SerializedPKRelatedField(
  107. queryset=Cluster.objects.all(),
  108. serializer=ClusterSerializer,
  109. nested=True,
  110. required=False,
  111. many=True
  112. )
  113. tenant_groups = SerializedPKRelatedField(
  114. queryset=TenantGroup.objects.all(),
  115. serializer=TenantGroupSerializer,
  116. nested=True,
  117. required=False,
  118. many=True
  119. )
  120. tenants = SerializedPKRelatedField(
  121. queryset=Tenant.objects.all(),
  122. serializer=TenantSerializer,
  123. nested=True,
  124. required=False,
  125. many=True
  126. )
  127. tags = serializers.SlugRelatedField(
  128. queryset=Tag.objects.all(),
  129. slug_field='slug',
  130. required=False,
  131. many=True
  132. )
  133. data_source = DataSourceSerializer(
  134. nested=True,
  135. required=False
  136. )
  137. data_file = DataFileSerializer(
  138. nested=True,
  139. required=False
  140. )
  141. class Meta:
  142. model = ConfigContext
  143. fields = [
  144. 'id', 'url', 'display_url', 'display', 'name', 'weight', 'profile', 'description', 'is_active', 'regions',
  145. 'site_groups', 'sites', 'locations', 'device_types', 'roles', 'platforms', 'cluster_types',
  146. 'cluster_groups', 'clusters', 'tenant_groups', 'tenants', 'owner', 'tags', 'data_source', 'data_path',
  147. 'data_file', 'data_synced', 'data', 'created', 'last_updated',
  148. ]
  149. brief_fields = ('id', 'url', 'display', 'name', 'description')