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
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import decimal
3from django.utils.translation import gettext as _
4from rest_framework import serializers
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 *
12from .manufacturers import ManufacturerSerializer
13from .platforms import PlatformSerializer
15__all__ = (
16 'DeviceTypeSerializer',
17 'ModuleBayTypeSerializer',
18 'ModuleTypeProfileSerializer',
19 'ModuleTypeSerializer',
20)
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)
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)
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')
71class ModuleBayTypeSerializer(PrimaryModelSerializer):
72 manufacturer = ManufacturerSerializer(
73 nested=True,
74 required=False,
75 allow_null=True,
76 )
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')
87class ModuleTypeProfileSerializer(PrimaryModelSerializer):
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')
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)
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)
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')