racks.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. from django.utils.translation import gettext as _
  2. from rest_framework import serializers
  3. from dcim.choices import *
  4. from dcim.constants import *
  5. from dcim.models import Rack, RackReservation, RackRole, RackType
  6. from netbox.api.fields import ChoiceField, RelatedObjectCountField
  7. from netbox.api.serializers import NetBoxModelSerializer
  8. from netbox.choices import *
  9. from netbox.config import ConfigItem
  10. from tenancy.api.serializers_.tenants import TenantSerializer
  11. from users.api.serializers_.users import UserSerializer
  12. from .manufacturers import ManufacturerSerializer
  13. from .sites import LocationSerializer, SiteSerializer
  14. __all__ = (
  15. 'RackElevationDetailFilterSerializer',
  16. 'RackReservationSerializer',
  17. 'RackRoleSerializer',
  18. 'RackSerializer',
  19. 'RackTypeSerializer',
  20. )
  21. class RackRoleSerializer(NetBoxModelSerializer):
  22. # Related object counts
  23. rack_count = RelatedObjectCountField('racks')
  24. class Meta:
  25. model = RackRole
  26. fields = [
  27. 'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'tags', 'custom_fields',
  28. 'created', 'last_updated', 'rack_count',
  29. ]
  30. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count')
  31. class RackBaseSerializer(NetBoxModelSerializer):
  32. form_factor = ChoiceField(
  33. choices=RackFormFactorChoices,
  34. allow_blank=True,
  35. required=False,
  36. allow_null=True
  37. )
  38. width = ChoiceField(
  39. choices=RackWidthChoices,
  40. required=False
  41. )
  42. outer_unit = ChoiceField(
  43. choices=RackDimensionUnitChoices,
  44. allow_blank=True,
  45. required=False,
  46. allow_null=True
  47. )
  48. weight_unit = ChoiceField(
  49. choices=WeightUnitChoices,
  50. allow_blank=True,
  51. required=False,
  52. allow_null=True
  53. )
  54. class RackTypeSerializer(RackBaseSerializer):
  55. manufacturer = ManufacturerSerializer(
  56. nested=True
  57. )
  58. class Meta:
  59. model = RackType
  60. fields = [
  61. 'id', 'url', 'display_url', 'display', 'manufacturer', 'model', 'slug', 'description', 'form_factor',
  62. 'width', 'u_height', 'starting_unit', 'desc_units', 'outer_width', 'outer_height', 'outer_depth',
  63. 'outer_unit', 'weight', 'max_weight', 'weight_unit', 'mounting_depth', 'description', 'comments', 'tags',
  64. 'custom_fields', 'created', 'last_updated',
  65. ]
  66. brief_fields = ('id', 'url', 'display', 'manufacturer', 'model', 'slug', 'description')
  67. class RackSerializer(RackBaseSerializer):
  68. site = SiteSerializer(
  69. nested=True
  70. )
  71. location = LocationSerializer(
  72. nested=True,
  73. required=False,
  74. allow_null=True,
  75. default=None
  76. )
  77. tenant = TenantSerializer(
  78. nested=True,
  79. required=False,
  80. allow_null=True
  81. )
  82. status = ChoiceField(
  83. choices=RackStatusChoices,
  84. required=False
  85. )
  86. airflow = ChoiceField(
  87. choices=RackAirflowChoices,
  88. allow_blank=True,
  89. required=False
  90. )
  91. role = RackRoleSerializer(
  92. nested=True,
  93. required=False,
  94. allow_null=True
  95. )
  96. facility_id = serializers.CharField(
  97. max_length=50,
  98. allow_blank=True,
  99. allow_null=True,
  100. label=_('Facility ID'),
  101. default=None
  102. )
  103. rack_type = RackTypeSerializer(
  104. nested=True,
  105. required=False,
  106. allow_null=True,
  107. default=None
  108. )
  109. # Related object counts
  110. device_count = RelatedObjectCountField('devices')
  111. powerfeed_count = RelatedObjectCountField('powerfeeds')
  112. class Meta:
  113. model = Rack
  114. fields = [
  115. 'id', 'url', 'display_url', 'display', 'name', 'facility_id', 'site', 'location', 'tenant', 'status',
  116. 'role', 'serial', 'asset_tag', 'rack_type', 'form_factor', 'width', 'u_height', 'starting_unit', 'weight',
  117. 'max_weight', 'weight_unit', 'desc_units', 'outer_width', 'outer_height', 'outer_depth', 'outer_unit',
  118. 'mounting_depth', 'airflow', 'description', 'comments', 'tags', 'custom_fields',
  119. 'created', 'last_updated', 'device_count', 'powerfeed_count',
  120. ]
  121. brief_fields = ('id', 'url', 'display', 'name', 'description', 'device_count')
  122. class RackReservationSerializer(NetBoxModelSerializer):
  123. rack = RackSerializer(
  124. nested=True,
  125. )
  126. status = ChoiceField(
  127. choices=RackReservationStatusChoices,
  128. required=False,
  129. )
  130. user = UserSerializer(
  131. nested=True,
  132. )
  133. tenant = TenantSerializer(
  134. nested=True,
  135. required=False,
  136. allow_null=True,
  137. )
  138. class Meta:
  139. model = RackReservation
  140. fields = [
  141. 'id', 'url', 'display_url', 'display', 'rack', 'units', 'status', 'created', 'last_updated', 'user',
  142. 'tenant', 'description', 'comments', 'tags', 'custom_fields',
  143. ]
  144. brief_fields = ('id', 'url', 'display', 'status', 'user', 'description', 'units')
  145. class RackElevationDetailFilterSerializer(serializers.Serializer):
  146. q = serializers.CharField(
  147. required=False,
  148. default=None
  149. )
  150. face = serializers.ChoiceField(
  151. choices=DeviceFaceChoices,
  152. default=DeviceFaceChoices.FACE_FRONT
  153. )
  154. render = serializers.ChoiceField(
  155. choices=RackElevationDetailRenderChoices,
  156. default=RackElevationDetailRenderChoices.RENDER_JSON
  157. )
  158. unit_width = serializers.IntegerField(
  159. default=ConfigItem('RACK_ELEVATION_DEFAULT_UNIT_WIDTH')
  160. )
  161. unit_height = serializers.IntegerField(
  162. default=ConfigItem('RACK_ELEVATION_DEFAULT_UNIT_HEIGHT')
  163. )
  164. legend_width = serializers.IntegerField(
  165. default=RACK_ELEVATION_DEFAULT_LEGEND_WIDTH
  166. )
  167. margin_width = serializers.IntegerField(
  168. default=RACK_ELEVATION_DEFAULT_MARGIN_WIDTH
  169. )
  170. exclude = serializers.IntegerField(
  171. required=False,
  172. default=None
  173. )
  174. expand_devices = serializers.BooleanField(
  175. required=False,
  176. default=True
  177. )
  178. include_images = serializers.BooleanField(
  179. required=False,
  180. default=True
  181. )