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

1from drf_spectacular.types import OpenApiTypes 

2from drf_spectacular.utils import extend_schema_field 

3from rest_framework import serializers 

4 

5from dcim.choices import * 

6from netbox.api.fields import ChoiceField 

7 

8from .devices import DeviceSerializer 

9 

10__all__ = ( 

11 'RackUnitSerializer', 

12) 

13 

14 

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) 

30 

31 @extend_schema_field(OpenApiTypes.STR) 

32 def get_display(self, obj): 

33 return obj['name'] 

34 

35 @extend_schema_field(OpenApiTypes.STR) 

36 def get_description(self, obj): 

37 return f'{obj["device"]}' if obj['device'] else None