Coverage for extras/api/serializers_/configcontexts.py: 100%

46 statements  

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

1from rest_framework import serializers 

2 

3from core.api.serializers_.data import DataFileSerializer, DataSourceSerializer 

4from dcim.api.serializers_.devicetypes import DeviceTypeSerializer 

5from dcim.api.serializers_.platforms import PlatformSerializer 

6from dcim.api.serializers_.roles import DeviceRoleSerializer 

7from dcim.api.serializers_.sites import LocationSerializer, RegionSerializer, SiteGroupSerializer, SiteSerializer 

8from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup 

9from extras.models import ConfigContext, ConfigContextProfile, Tag 

10from netbox.api.fields import SerializedPKRelatedField 

11from netbox.api.serializers import ChangeLogMessageSerializer, PrimaryModelSerializer, ValidatedModelSerializer 

12from tenancy.api.serializers_.tenants import TenantGroupSerializer, TenantSerializer 

13from tenancy.models import Tenant, TenantGroup 

14from users.api.serializers_.mixins import OwnerMixin 

15from virtualization.api.serializers_.clusters import ClusterGroupSerializer, ClusterSerializer, ClusterTypeSerializer 

16from virtualization.models import Cluster, ClusterGroup, ClusterType 

17 

18__all__ = ( 

19 'ConfigContextProfileSerializer', 

20 'ConfigContextSerializer', 

21) 

22 

23 

24class ConfigContextProfileSerializer(PrimaryModelSerializer): 

25 data_source = DataSourceSerializer( 

26 nested=True, 

27 required=False 

28 ) 

29 data_file = DataFileSerializer( 

30 nested=True, 

31 required=False, 

32 allow_null=True 

33 ) 

34 

35 class Meta: 

36 model = ConfigContextProfile 

37 fields = [ 

38 'id', 'url', 'display_url', 'display', 'name', 'description', 'schema', 'tags', 'owner', 'comments', 

39 'data_source', 'data_path', 'data_file', 'data_synced', 'created', 'last_updated', 

40 ] 

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

42 model_clean_fields = ('data_source', 'data_path', 'auto_sync_enabled', 'data_synced', 'schema') 

43 

44 

45class ConfigContextSerializer(OwnerMixin, ChangeLogMessageSerializer, ValidatedModelSerializer): 

46 profile = ConfigContextProfileSerializer( 

47 nested=True, 

48 required=False, 

49 allow_null=True, 

50 default=None, 

51 ) 

52 regions = SerializedPKRelatedField( 

53 queryset=Region.objects.all(), 

54 serializer=RegionSerializer, 

55 nested=True, 

56 required=False, 

57 many=True 

58 ) 

59 site_groups = SerializedPKRelatedField( 

60 queryset=SiteGroup.objects.all(), 

61 serializer=SiteGroupSerializer, 

62 nested=True, 

63 required=False, 

64 many=True 

65 ) 

66 sites = SerializedPKRelatedField( 

67 queryset=Site.objects.all(), 

68 serializer=SiteSerializer, 

69 nested=True, 

70 required=False, 

71 many=True 

72 ) 

73 locations = SerializedPKRelatedField( 

74 queryset=Location.objects.all(), 

75 serializer=LocationSerializer, 

76 nested=True, 

77 required=False, 

78 many=True 

79 ) 

80 device_types = SerializedPKRelatedField( 

81 queryset=DeviceType.objects.all(), 

82 serializer=DeviceTypeSerializer, 

83 nested=True, 

84 required=False, 

85 many=True 

86 ) 

87 roles = SerializedPKRelatedField( 

88 queryset=DeviceRole.objects.all(), 

89 serializer=DeviceRoleSerializer, 

90 nested=True, 

91 required=False, 

92 many=True 

93 ) 

94 platforms = SerializedPKRelatedField( 

95 queryset=Platform.objects.all(), 

96 serializer=PlatformSerializer, 

97 nested=True, 

98 required=False, 

99 many=True 

100 ) 

101 cluster_types = SerializedPKRelatedField( 

102 queryset=ClusterType.objects.all(), 

103 serializer=ClusterTypeSerializer, 

104 nested=True, 

105 required=False, 

106 many=True 

107 ) 

108 cluster_groups = SerializedPKRelatedField( 

109 queryset=ClusterGroup.objects.all(), 

110 serializer=ClusterGroupSerializer, 

111 nested=True, 

112 required=False, 

113 many=True 

114 ) 

115 clusters = SerializedPKRelatedField( 

116 queryset=Cluster.objects.all(), 

117 serializer=ClusterSerializer, 

118 nested=True, 

119 required=False, 

120 many=True 

121 ) 

122 tenant_groups = SerializedPKRelatedField( 

123 queryset=TenantGroup.objects.all(), 

124 serializer=TenantGroupSerializer, 

125 nested=True, 

126 required=False, 

127 many=True 

128 ) 

129 tenants = SerializedPKRelatedField( 

130 queryset=Tenant.objects.all(), 

131 serializer=TenantSerializer, 

132 nested=True, 

133 required=False, 

134 many=True 

135 ) 

136 tags = serializers.SlugRelatedField( 

137 queryset=Tag.objects.all(), 

138 slug_field='slug', 

139 required=False, 

140 many=True 

141 ) 

142 data_source = DataSourceSerializer( 

143 nested=True, 

144 required=False 

145 ) 

146 data_file = DataFileSerializer( 

147 nested=True, 

148 required=False, 

149 allow_null=True 

150 ) 

151 

152 class Meta: 

153 model = ConfigContext 

154 fields = [ 

155 'id', 'url', 'display_url', 'display', 'name', 'weight', 'profile', 'description', 'is_active', 'regions', 

156 'site_groups', 'sites', 'locations', 'device_types', 'roles', 'platforms', 'cluster_types', 

157 'cluster_groups', 'clusters', 'tenant_groups', 'tenants', 'owner', 'tags', 'data_source', 'data_path', 

158 'data_file', 'data_synced', 'data', 'created', 'last_updated', 

159 ] 

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

161 model_clean_fields = ('data_source', 'data_path', 'auto_sync_enabled', 'data_synced', 'data')