Coverage for dcim/api/serializers_/power.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 PowerFeed, PowerPanel 

3from netbox.api.fields import ChoiceField, RelatedObjectCountField 

4from netbox.api.serializers import PrimaryModelSerializer 

5from tenancy.api.serializers_.tenants import TenantSerializer 

6 

7from .base import ConnectedEndpointsSerializer 

8from .cables import CabledObjectSerializer 

9from .racks import RackSerializer 

10from .sites import LocationSerializer, SiteSerializer 

11 

12__all__ = ( 

13 'PowerFeedSerializer', 

14 'PowerPanelSerializer', 

15) 

16 

17 

18class PowerPanelSerializer(PrimaryModelSerializer): 

19 site = SiteSerializer(nested=True) 

20 location = LocationSerializer( 

21 nested=True, 

22 required=False, 

23 allow_null=True, 

24 default=None 

25 ) 

26 

27 # Related object counts 

28 powerfeed_count = RelatedObjectCountField('powerfeeds') 

29 

30 class Meta: 

31 model = PowerPanel 

32 fields = [ 

33 'id', 'url', 'display_url', 'display', 'site', 'location', 'name', 'description', 'owner', 'comments', 

34 'tags', 'custom_fields', 'powerfeed_count', 'created', 'last_updated', 

35 ] 

36 brief_fields = ('id', 'url', 'display', 'name', 'description', 'powerfeed_count') 

37 

38 

39class PowerFeedSerializer(PrimaryModelSerializer, CabledObjectSerializer, ConnectedEndpointsSerializer): 

40 power_panel = PowerPanelSerializer(nested=True) 

41 rack = RackSerializer( 

42 nested=True, 

43 required=False, 

44 allow_null=True, 

45 default=None 

46 ) 

47 type = ChoiceField( 

48 choices=PowerFeedTypeChoices, 

49 default=lambda: PowerFeedTypeChoices.TYPE_PRIMARY, 

50 ) 

51 status = ChoiceField( 

52 choices=PowerFeedStatusChoices, 

53 default=lambda: PowerFeedStatusChoices.STATUS_ACTIVE, 

54 ) 

55 supply = ChoiceField( 

56 choices=PowerFeedSupplyChoices, 

57 default=lambda: PowerFeedSupplyChoices.SUPPLY_AC, 

58 ) 

59 phase = ChoiceField( 

60 choices=PowerFeedPhaseChoices, 

61 default=lambda: PowerFeedPhaseChoices.PHASE_SINGLE, 

62 ) 

63 tenant = TenantSerializer( 

64 nested=True, 

65 required=False, 

66 allow_null=True 

67 ) 

68 

69 class Meta: 

70 model = PowerFeed 

71 fields = [ 

72 'id', 'url', 'display_url', 'display', 'power_panel', 'rack', 'name', 'status', 'type', 'supply', 

73 'phase', 'voltage', 'amperage', 'max_utilization', 'mark_connected', 'cable', 'cable_end', 'link_peers', 

74 'link_peers_type', 'connected_endpoints', 'connected_endpoints_type', 'connected_endpoints_reachable', 

75 'description', 'tenant', 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 

76 '_occupied', 

77 ] 

78 brief_fields = ('id', 'url', 'display', 'name', 'description', 'cable', '_occupied')