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
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from rest_framework import serializers
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
18__all__ = (
19 'ConfigContextProfileSerializer',
20 'ConfigContextSerializer',
21)
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 )
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')
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 )
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')