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

30 statements  

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

1from dcim.choices import * 

2from dcim.models import CoolingFeed, CoolingSource 

3from netbox.api.fields import ChoiceField, RelatedObjectCountField 

4from netbox.api.serializers import PrimaryModelSerializer 

5from netbox.choices import FlowRateUnitChoices 

6from tenancy.api.serializers_.tenants import TenantSerializer 

7 

8from .racks import RackSerializer 

9from .sites import LocationSerializer, SiteSerializer 

10 

11__all__ = ( 

12 'CoolingFeedSerializer', 

13 'CoolingSourceSerializer', 

14) 

15 

16 

17class CoolingSourceSerializer(PrimaryModelSerializer): 

18 site = SiteSerializer(nested=True) 

19 location = LocationSerializer( 

20 nested=True, 

21 required=False, 

22 allow_null=True, 

23 default=None 

24 ) 

25 type = ChoiceField( 

26 choices=CoolingSourceTypeChoices 

27 ) 

28 status = ChoiceField( 

29 choices=CoolingSourceStatusChoices, 

30 default=lambda: CoolingSourceStatusChoices.STATUS_ACTIVE, 

31 ) 

32 fluid_type = ChoiceField( 

33 choices=FluidTypeChoices, 

34 allow_blank=True, 

35 required=False, 

36 allow_null=True 

37 ) 

38 

39 # Related object counts 

40 coolingfeed_count = RelatedObjectCountField('cooling_feeds') 

41 

42 class Meta: 

43 model = CoolingSource 

44 fields = [ 

45 'id', 'url', 'display_url', 'display', 'site', 'location', 'name', 'type', 'status', 'fluid_type', 

46 'cooling_capacity', 'description', 'owner', 'comments', 'tags', 

47 'custom_fields', 'coolingfeed_count', 'created', 'last_updated', 

48 ] 

49 brief_fields = ('id', 'url', 'display', 'name', 'description', 'coolingfeed_count') 

50 

51 

52class CoolingFeedSerializer(PrimaryModelSerializer): 

53 cooling_source = CoolingSourceSerializer(nested=True) 

54 rack = RackSerializer( 

55 nested=True, 

56 required=False, 

57 allow_null=True, 

58 default=None 

59 ) 

60 status = ChoiceField( 

61 choices=CoolingFeedStatusChoices, 

62 default=lambda: CoolingFeedStatusChoices.STATUS_ACTIVE, 

63 ) 

64 max_flow_unit = ChoiceField( 

65 choices=FlowRateUnitChoices, 

66 allow_blank=True, 

67 required=False, 

68 allow_null=True 

69 ) 

70 tenant = TenantSerializer( 

71 nested=True, 

72 required=False, 

73 allow_null=True 

74 ) 

75 

76 class Meta: 

77 model = CoolingFeed 

78 fields = [ 

79 'id', 'url', 'display_url', 'display', 'cooling_source', 'rack', 'name', 'status', 

80 'cooling_capacity', 'max_flow', 'max_flow_unit', 'description', 'tenant', 

81 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 

82 ] 

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