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

56 statements  

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

1from rest_framework import serializers 

2from timezone_field.rest_framework import TimeZoneSerializerField 

3 

4from dcim.choices import * 

5from dcim.models import Location, Region, Site, SiteGroup 

6from ipam.api.serializers_.asns import ASNSerializer 

7from ipam.models import ASN 

8from netbox.api.fields import ChoiceField, RelatedObjectCountField, SerializedPKRelatedField 

9from netbox.api.serializers import NestedGroupModelSerializer, PrimaryModelSerializer 

10from tenancy.api.serializers_.tenants import TenantSerializer 

11 

12from .nested import NestedLocationSerializer, NestedRegionSerializer, NestedSiteGroupSerializer 

13 

14__all__ = ( 

15 'LocationSerializer', 

16 'RegionSerializer', 

17 'SiteGroupSerializer', 

18 'SiteSerializer', 

19) 

20 

21 

22class RegionSerializer(NestedGroupModelSerializer): 

23 parent = NestedRegionSerializer(required=False, allow_null=True, default=None) 

24 site_count = serializers.IntegerField(read_only=True, default=0) 

25 prefix_count = RelatedObjectCountField('prefix_set') 

26 

27 class Meta: 

28 model = Region 

29 fields = [ 

30 'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields', 

31 'created', 'last_updated', 'site_count', 'prefix_count', 'owner', 'comments', '_depth', 

32 ] 

33 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth') 

34 

35 

36class SiteGroupSerializer(NestedGroupModelSerializer): 

37 parent = NestedSiteGroupSerializer(required=False, allow_null=True, default=None) 

38 site_count = serializers.IntegerField(read_only=True, default=0) 

39 prefix_count = RelatedObjectCountField('prefix_set') 

40 

41 class Meta: 

42 model = SiteGroup 

43 fields = [ 

44 'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields', 

45 'created', 'last_updated', 'site_count', 'prefix_count', 'owner', 'comments', '_depth', 

46 ] 

47 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth') 

48 

49 

50class SiteSerializer(PrimaryModelSerializer): 

51 status = ChoiceField(choices=SiteStatusChoices, required=False) 

52 region = RegionSerializer(nested=True, required=False, allow_null=True) 

53 group = SiteGroupSerializer(nested=True, required=False, allow_null=True) 

54 tenant = TenantSerializer(nested=True, required=False, allow_null=True) 

55 time_zone = TimeZoneSerializerField(required=False, allow_null=True) 

56 asns = SerializedPKRelatedField( 

57 queryset=ASN.objects.all(), 

58 serializer=ASNSerializer, 

59 nested=True, 

60 required=False, 

61 many=True 

62 ) 

63 

64 # Related object counts 

65 circuit_count = RelatedObjectCountField('circuit_terminations') 

66 device_count = RelatedObjectCountField('devices') 

67 prefix_count = RelatedObjectCountField('prefix_set') 

68 rack_count = RelatedObjectCountField('racks') 

69 vlan_count = RelatedObjectCountField('vlans') 

70 virtualmachine_count = RelatedObjectCountField('virtual_machines') 

71 

72 class Meta: 

73 model = Site 

74 fields = [ 

75 'id', 'url', 'display_url', 'display', 'name', 'slug', 'status', 'region', 'group', 'tenant', 'facility', 

76 'time_zone', 'description', 'physical_address', 'shipping_address', 'latitude', 'longitude', 'owner', 

77 'comments', 'asns', 'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count', 'device_count', 

78 'prefix_count', 'rack_count', 'virtualmachine_count', 'vlan_count', 

79 ] 

80 brief_fields = ('id', 'url', 'display', 'name', 'description', 'slug') 

81 

82 

83class LocationSerializer(NestedGroupModelSerializer): 

84 site = SiteSerializer(nested=True) 

85 parent = NestedLocationSerializer(required=False, allow_null=True, default=None) 

86 status = ChoiceField(choices=LocationStatusChoices, required=False) 

87 tenant = TenantSerializer(nested=True, required=False, allow_null=True) 

88 rack_count = serializers.IntegerField(read_only=True, default=0) 

89 device_count = serializers.IntegerField(read_only=True, default=0) 

90 prefix_count = RelatedObjectCountField('prefix_set') 

91 

92 class Meta: 

93 model = Location 

94 fields = [ 

95 'id', 'url', 'display_url', 'display', 'name', 'slug', 'site', 'parent', 'status', 'tenant', 'facility', 

96 'description', 'tags', 'custom_fields', 'created', 'last_updated', 'rack_count', 'device_count', 

97 'prefix_count', 'owner', 'comments', '_depth', 

98 ] 

99 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count', '_depth')