Coverage for dcim/api/serializers_/devicetypes.py: 100%

72 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1import decimal 

2 

3from django.utils.translation import gettext as _ 

4from rest_framework import serializers 

5 

6from dcim.choices import * 

7from dcim.models import DeviceType, ModuleBayType, ModuleType, ModuleTypeProfile 

8from netbox.api.fields import AttributesField, ChoiceField, SerializedPKRelatedField 

9from netbox.api.serializers import PrimaryModelSerializer 

10from netbox.choices import * 

11 

12from .manufacturers import ManufacturerSerializer 

13from .platforms import PlatformSerializer 

14 

15__all__ = ( 

16 'DeviceTypeSerializer', 

17 'ModuleBayTypeSerializer', 

18 'ModuleTypeProfileSerializer', 

19 'ModuleTypeSerializer', 

20) 

21 

22 

23class DeviceTypeSerializer(PrimaryModelSerializer): 

24 manufacturer = ManufacturerSerializer(nested=True) 

25 default_platform = PlatformSerializer(nested=True, required=False, allow_null=True) 

26 u_height = serializers.DecimalField( 

27 max_digits=4, 

28 decimal_places=1, 

29 label=_('Position (U)'), 

30 min_value=decimal.Decimal(0), 

31 default=1.0 

32 ) 

33 subdevice_role = ChoiceField(choices=SubdeviceRoleChoices, allow_blank=True, required=False, allow_null=True) 

34 airflow = ChoiceField(choices=DeviceAirflowChoices, allow_blank=True, required=False, allow_null=True) 

35 cooling_method = ChoiceField(choices=CoolingMethodChoices, allow_blank=True, required=False, allow_null=True) 

36 weight_unit = ChoiceField(choices=WeightUnitChoices, allow_blank=True, required=False, allow_null=True) 

37 front_image = serializers.ImageField(required=False, allow_null=True) 

38 rear_image = serializers.ImageField(required=False, allow_null=True) 

39 

40 # Counter fields 

41 console_port_template_count = serializers.IntegerField(read_only=True) 

42 console_server_port_template_count = serializers.IntegerField(read_only=True) 

43 power_port_template_count = serializers.IntegerField(read_only=True) 

44 power_outlet_template_count = serializers.IntegerField(read_only=True) 

45 cooling_intake_template_count = serializers.IntegerField(read_only=True) 

46 cooling_outflow_template_count = serializers.IntegerField(read_only=True) 

47 interface_template_count = serializers.IntegerField(read_only=True) 

48 front_port_template_count = serializers.IntegerField(read_only=True) 

49 rear_port_template_count = serializers.IntegerField(read_only=True) 

50 device_bay_template_count = serializers.IntegerField(read_only=True) 

51 module_bay_template_count = serializers.IntegerField(read_only=True) 

52 inventory_item_template_count = serializers.IntegerField(read_only=True) 

53 device_count = serializers.IntegerField(read_only=True) 

54 

55 class Meta: 

56 model = DeviceType 

57 fields = [ 

58 'id', 'url', 'display_url', 'display', 'manufacturer', 'default_platform', 'model', 'slug', 'part_number', 

59 'u_height', 'exclude_from_utilization', 'is_full_depth', 'subdevice_role', 'airflow', 'cooling_method', 

60 'weight', 'weight_unit', 'end_of_life', 'front_image', 'rear_image', 'description', 'owner', 

61 'comments', 'tags', 'custom_fields', 

62 'created', 'last_updated', 'device_count', 'console_port_template_count', 

63 'console_server_port_template_count', 'power_port_template_count', 'power_outlet_template_count', 

64 'cooling_intake_template_count', 'cooling_outflow_template_count', 'interface_template_count', 

65 'front_port_template_count', 'rear_port_template_count', 'device_bay_template_count', 

66 'module_bay_template_count', 'inventory_item_template_count', 

67 ] 

68 brief_fields = ('id', 'url', 'display', 'manufacturer', 'model', 'slug', 'description', 'device_count') 

69 

70 

71class ModuleBayTypeSerializer(PrimaryModelSerializer): 

72 manufacturer = ManufacturerSerializer( 

73 nested=True, 

74 required=False, 

75 allow_null=True, 

76 ) 

77 

78 class Meta: 

79 model = ModuleBayType 

80 fields = [ 

81 'id', 'url', 'display_url', 'display', 'name', 'slug', 'manufacturer', 'color', 'description', 'owner', 

82 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 

83 ] 

84 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'manufacturer', 'color', 'description') 

85 

86 

87class ModuleTypeProfileSerializer(PrimaryModelSerializer): 

88 

89 class Meta: 

90 model = ModuleTypeProfile 

91 fields = [ 

92 'id', 'url', 'display_url', 'display', 'name', 'description', 'schema', 'owner', 'comments', 'tags', 

93 'custom_fields', 'created', 'last_updated', 

94 ] 

95 brief_fields = ('id', 'url', 'display', 'name', 'description') 

96 

97 

98class ModuleTypeSerializer(PrimaryModelSerializer): 

99 profile = ModuleTypeProfileSerializer( 

100 nested=True, 

101 required=False, 

102 allow_null=True 

103 ) 

104 manufacturer = ManufacturerSerializer( 

105 nested=True 

106 ) 

107 module_bay_types = SerializedPKRelatedField( 

108 queryset=ModuleBayType.objects.all(), 

109 serializer=ModuleBayTypeSerializer, 

110 nested=True, 

111 required=False, 

112 many=True 

113 ) 

114 weight_unit = ChoiceField( 

115 choices=WeightUnitChoices, 

116 allow_blank=True, 

117 required=False, 

118 allow_null=True 

119 ) 

120 airflow = ChoiceField( 

121 choices=ModuleAirflowChoices, 

122 allow_blank=True, 

123 required=False, 

124 allow_null=True 

125 ) 

126 cooling_method = ChoiceField(choices=CoolingMethodChoices, allow_blank=True, required=False, allow_null=True) 

127 attributes = AttributesField( 

128 source='attribute_data', 

129 required=False, 

130 allow_null=True 

131 ) 

132 module_count = serializers.IntegerField(read_only=True) 

133 

134 # Counter fields 

135 console_port_template_count = serializers.IntegerField(read_only=True) 

136 console_server_port_template_count = serializers.IntegerField(read_only=True) 

137 power_port_template_count = serializers.IntegerField(read_only=True) 

138 power_outlet_template_count = serializers.IntegerField(read_only=True) 

139 cooling_intake_template_count = serializers.IntegerField(read_only=True) 

140 cooling_outflow_template_count = serializers.IntegerField(read_only=True) 

141 interface_template_count = serializers.IntegerField(read_only=True) 

142 front_port_template_count = serializers.IntegerField(read_only=True) 

143 rear_port_template_count = serializers.IntegerField(read_only=True) 

144 module_bay_template_count = serializers.IntegerField(read_only=True) 

145 

146 class Meta: 

147 model = ModuleType 

148 fields = [ 

149 'id', 'url', 'display_url', 'display', 'profile', 'manufacturer', 'model', 'part_number', 'airflow', 

150 'cooling_method', 'weight', 'weight_unit', 'end_of_life', 'description', 'attributes', 'module_bay_types', 

151 'owner', 'comments', 'tags', 'custom_fields', 

152 'created', 'last_updated', 'module_count', 'console_port_template_count', 

153 'console_server_port_template_count', 'power_port_template_count', 'power_outlet_template_count', 

154 'cooling_intake_template_count', 'cooling_outflow_template_count', 'interface_template_count', 

155 'front_port_template_count', 'rear_port_template_count', 'module_bay_template_count', 

156 ] 

157 brief_fields = ('id', 'url', 'display', 'profile', 'manufacturer', 'model', 'description', 'module_count')