Coverage for circuits/forms/filtersets.py: 100%
105 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 django import forms
2from django.utils.translation import gettext as _
4from circuits.choices import (
5 CircuitCommitRateChoices,
6 CircuitPriorityChoices,
7 CircuitStatusChoices,
8 CircuitTerminationSideChoices,
9 VirtualCircuitTerminationRoleChoices,
10)
11from circuits.models import *
12from dcim.models import Location, Region, Site, SiteGroup
13from ipam.models import ASN
14from netbox.choices import DistanceUnitChoices
15from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
16from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
17from utilities.forms import add_blank_choice
18from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField
19from utilities.forms.rendering import FieldSet
20from utilities.forms.widgets import DatePicker, NumberWithOptions
22__all__ = (
23 'CircuitFilterForm',
24 'CircuitGroupAssignmentFilterForm',
25 'CircuitGroupFilterForm',
26 'CircuitTerminationFilterForm',
27 'CircuitTypeFilterForm',
28 'ProviderAccountFilterForm',
29 'ProviderFilterForm',
30 'ProviderNetworkFilterForm',
31 'VirtualCircuitFilterForm',
32 'VirtualCircuitTerminationFilterForm',
33 'VirtualCircuitTypeFilterForm',
34)
37class ProviderFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
38 model = Provider
39 fieldsets = (
40 FieldSet('q', 'filter_id', 'tag'),
41 FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')),
42 FieldSet('asn_id', name=_('ASN')),
43 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
44 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
45 )
46 region_id = DynamicModelMultipleChoiceField(
47 queryset=Region.objects.all(),
48 required=False,
49 label=_('Region')
50 )
51 site_group_id = DynamicModelMultipleChoiceField(
52 queryset=SiteGroup.objects.all(),
53 required=False,
54 label=_('Site group')
55 )
56 site_id = DynamicModelMultipleChoiceField(
57 queryset=Site.objects.all(),
58 required=False,
59 query_params={
60 'region_id': '$region_id',
61 'site_group_id': '$site_group_id',
62 },
63 label=_('Site')
64 )
65 asn_id = DynamicModelMultipleChoiceField(
66 queryset=ASN.objects.all(),
67 required=False,
68 label=_('ASNs')
69 )
70 tag = TagFilterField(model)
73class ProviderAccountFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
74 model = ProviderAccount
75 fieldsets = (
76 FieldSet('q', 'filter_id', 'tag'),
77 FieldSet('provider_id', 'account', name=_('Attributes')),
78 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
79 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
80 )
81 provider_id = DynamicModelMultipleChoiceField(
82 queryset=Provider.objects.all(),
83 required=False,
84 label=_('Provider')
85 )
86 account = forms.CharField(
87 label=_('Account'),
88 required=False
89 )
90 tag = TagFilterField(model)
93class ProviderNetworkFilterForm(PrimaryModelFilterSetForm):
94 model = ProviderNetwork
95 fieldsets = (
96 FieldSet('q', 'filter_id', 'tag'),
97 FieldSet('provider_id', 'service_id', name=_('Attributes')),
98 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
99 )
100 provider_id = DynamicModelMultipleChoiceField(
101 queryset=Provider.objects.all(),
102 required=False,
103 label=_('Provider')
104 )
105 service_id = forms.CharField(
106 label=_('Service ID'),
107 max_length=100,
108 required=False
109 )
110 tag = TagFilterField(model)
113class CircuitTypeFilterForm(OrganizationalModelFilterSetForm):
114 model = CircuitType
115 fieldsets = (
116 FieldSet('q', 'filter_id', 'tag'),
117 FieldSet('color', name=_('Attributes')),
118 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
119 )
120 tag = TagFilterField(model)
122 color = ColorField(
123 label=_('Color'),
124 required=False
125 )
128class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
129 model = Circuit
130 fieldsets = (
131 FieldSet('q', 'filter_id', 'tag'),
132 FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')),
133 FieldSet(
134 'type_id', 'status', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit',
135 name=_('Attributes')
136 ),
137 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Location')),
138 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
139 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
140 FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
141 )
142 selector_fields = ('filter_id', 'q', 'region_id', 'site_group_id', 'site_id', 'provider_id', 'provider_network_id')
143 type_id = DynamicModelMultipleChoiceField(
144 queryset=CircuitType.objects.all(),
145 required=False,
146 label=_('Type')
147 )
148 provider_id = DynamicModelMultipleChoiceField(
149 queryset=Provider.objects.all(),
150 required=False,
151 label=_('Provider')
152 )
153 provider_account_id = DynamicModelMultipleChoiceField(
154 queryset=ProviderAccount.objects.all(),
155 required=False,
156 query_params={
157 'provider_id': '$provider_id'
158 },
159 label=_('Provider account')
160 )
161 provider_network_id = DynamicModelMultipleChoiceField(
162 queryset=ProviderNetwork.objects.all(),
163 required=False,
164 query_params={
165 'provider_id': '$provider_id'
166 },
167 label=_('Provider network')
168 )
169 status = forms.MultipleChoiceField(
170 label=_('Status'),
171 choices=CircuitStatusChoices,
172 required=False
173 )
174 region_id = DynamicModelMultipleChoiceField(
175 queryset=Region.objects.all(),
176 required=False,
177 label=_('Region')
178 )
179 site_group_id = DynamicModelMultipleChoiceField(
180 queryset=SiteGroup.objects.all(),
181 required=False,
182 label=_('Site group')
183 )
184 site_id = DynamicModelMultipleChoiceField(
185 queryset=Site.objects.all(),
186 required=False,
187 query_params={
188 'region_id': '$region_id',
189 'site_group_id': '$site_group_id',
190 },
191 label=_('Site')
192 )
193 location_id = DynamicModelMultipleChoiceField(
194 queryset=Location.objects.all(),
195 required=False,
196 label=_('Location')
197 )
198 install_date = forms.DateField(
199 label=_('Install date'),
200 required=False,
201 widget=DatePicker
202 )
203 termination_date = forms.DateField(
204 label=_('Termination date'),
205 required=False,
206 widget=DatePicker
207 )
208 commit_rate = forms.IntegerField(
209 required=False,
210 min_value=0,
211 label=_('Commit rate (Kbps)'),
212 widget=NumberWithOptions(
213 options=CircuitCommitRateChoices
214 )
215 )
216 distance = forms.DecimalField(
217 label=_('Distance'),
218 required=False,
219 )
220 distance_unit = forms.ChoiceField(
221 label=_('Distance unit'),
222 choices=add_blank_choice(DistanceUnitChoices),
223 required=False
224 )
225 tag = TagFilterField(model)
228class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
229 model = CircuitTermination
230 fieldsets = (
231 FieldSet('q', 'filter_id', 'tag'),
232 FieldSet('circuit_id', 'term_side', name=_('Circuit')),
233 FieldSet('provider_id', name=_('Provider')),
234 FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Termination')),
235 )
236 region_id = DynamicModelMultipleChoiceField(
237 queryset=Region.objects.all(),
238 required=False,
239 label=_('Region')
240 )
241 site_group_id = DynamicModelMultipleChoiceField(
242 queryset=SiteGroup.objects.all(),
243 required=False,
244 label=_('Site group')
245 )
246 site_id = DynamicModelMultipleChoiceField(
247 queryset=Site.objects.all(),
248 required=False,
249 label=_('Site')
250 )
251 location_id = DynamicModelMultipleChoiceField(
252 queryset=Location.objects.all(),
253 required=False,
254 label=_('Location')
255 )
256 circuit_id = DynamicModelMultipleChoiceField(
257 queryset=Circuit.objects.all(),
258 required=False,
259 label=_('Circuit')
260 )
261 term_side = forms.MultipleChoiceField(
262 label=_('Term Side'),
263 choices=CircuitTerminationSideChoices,
264 required=False
265 )
266 provider_network_id = DynamicModelMultipleChoiceField(
267 queryset=ProviderNetwork.objects.all(),
268 required=False,
269 query_params={
270 'provider_id': '$provider_id'
271 },
272 label=_('Provider network')
273 )
274 provider_id = DynamicModelMultipleChoiceField(
275 queryset=Provider.objects.all(),
276 required=False,
277 label=_('Provider')
278 )
279 tag = TagFilterField(model)
282class CircuitGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
283 model = CircuitGroup
284 fieldsets = (
285 FieldSet('q', 'filter_id', 'tag'),
286 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
287 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
288 )
289 tag = TagFilterField(model)
292class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm):
293 model = CircuitGroupAssignment
294 fieldsets = (
295 FieldSet('q', 'filter_id', 'tag'),
296 FieldSet('provider_id', 'member_id', 'group_id', 'priority', name=_('Assignment')),
297 )
298 provider_id = DynamicModelMultipleChoiceField(
299 queryset=Provider.objects.all(),
300 required=False,
301 label=_('Provider')
302 )
303 member_id = DynamicModelMultipleChoiceField(
304 queryset=Circuit.objects.all(),
305 required=False,
306 label=_('Circuit')
307 )
308 group_id = DynamicModelMultipleChoiceField(
309 queryset=CircuitGroup.objects.all(),
310 required=False,
311 label=_('Group')
312 )
313 priority = forms.MultipleChoiceField(
314 label=_('Priority'),
315 choices=CircuitPriorityChoices,
316 required=False
317 )
318 tag = TagFilterField(model)
321class VirtualCircuitTypeFilterForm(OrganizationalModelFilterSetForm):
322 model = VirtualCircuitType
323 fieldsets = (
324 FieldSet('q', 'filter_id', 'tag'),
325 FieldSet('color', name=_('Attributes')),
326 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
327 )
328 tag = TagFilterField(model)
330 color = ColorField(
331 label=_('Color'),
332 required=False
333 )
336class VirtualCircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
337 model = VirtualCircuit
338 fieldsets = (
339 FieldSet('q', 'filter_id', 'tag'),
340 FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')),
341 FieldSet('type_id', 'status', name=_('Attributes')),
342 FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
343 FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
344 )
345 selector_fields = ('filter_id', 'q', 'provider_id', 'provider_network_id')
346 provider_id = DynamicModelMultipleChoiceField(
347 queryset=Provider.objects.all(),
348 required=False,
349 label=_('Provider')
350 )
351 provider_account_id = DynamicModelMultipleChoiceField(
352 queryset=ProviderAccount.objects.all(),
353 required=False,
354 query_params={
355 'provider_id': '$provider_id'
356 },
357 label=_('Provider account')
358 )
359 provider_network_id = DynamicModelMultipleChoiceField(
360 queryset=ProviderNetwork.objects.all(),
361 required=False,
362 query_params={
363 'provider_id': '$provider_id'
364 },
365 label=_('Provider network')
366 )
367 type_id = DynamicModelMultipleChoiceField(
368 queryset=VirtualCircuitType.objects.all(),
369 required=False,
370 label=_('Type')
371 )
372 status = forms.MultipleChoiceField(
373 label=_('Status'),
374 choices=CircuitStatusChoices,
375 required=False
376 )
377 tag = TagFilterField(model)
380class VirtualCircuitTerminationFilterForm(NetBoxModelFilterSetForm):
381 model = VirtualCircuitTermination
382 fieldsets = (
383 FieldSet('q', 'filter_id', 'tag'),
384 FieldSet('virtual_circuit_id', 'role', name=_('Virtual circuit')),
385 FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')),
386 )
387 virtual_circuit_id = DynamicModelMultipleChoiceField(
388 queryset=VirtualCircuit.objects.all(),
389 required=False,
390 label=_('Virtual circuit')
391 )
392 role = forms.MultipleChoiceField(
393 label=_('Role'),
394 choices=VirtualCircuitTerminationRoleChoices,
395 required=False
396 )
397 provider_network_id = DynamicModelMultipleChoiceField(
398 queryset=ProviderNetwork.objects.all(),
399 required=False,
400 query_params={
401 'provider_id': '$provider_id'
402 },
403 label=_('Provider network')
404 )
405 provider_id = DynamicModelMultipleChoiceField(
406 queryset=Provider.objects.all(),
407 required=False,
408 label=_('Provider')
409 )
410 tag = TagFilterField(model)