Coverage for dcim/api/serializers_/rackunits.py: 90%
21 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
1from drf_spectacular.types import OpenApiTypes
2from drf_spectacular.utils import extend_schema_field
3from rest_framework import serializers
5from dcim.choices import *
6from netbox.api.fields import ChoiceField
8from .devices import DeviceSerializer
10__all__ = (
11 'RackUnitSerializer',
12)
15class RackUnitSerializer(serializers.Serializer):
16 """
17 A rack unit is an abstraction formed by the set (rack, position, face); it does not exist as a row in the database.
18 """
19 id = serializers.DecimalField(
20 max_digits=4,
21 decimal_places=1,
22 read_only=True
23 )
24 name = serializers.CharField(read_only=True)
25 face = ChoiceField(choices=DeviceFaceChoices, read_only=True)
26 device = DeviceSerializer(nested=True, read_only=True)
27 occupied = serializers.BooleanField(read_only=True)
28 display = serializers.SerializerMethodField(read_only=True)
29 description = serializers.SerializerMethodField(read_only=True)
31 @extend_schema_field(OpenApiTypes.STR)
32 def get_display(self, obj):
33 return obj['name']
35 @extend_schema_field(OpenApiTypes.STR)
36 def get_description(self, obj):
37 return f'{obj["device"]}' if obj['device'] else None