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

1from django import forms 

2from django.utils.translation import gettext as _ 

3 

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 

21 

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) 

35 

36 

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) 

71 

72 

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) 

91 

92 

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) 

111 

112 

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) 

121 

122 color = ColorField( 

123 label=_('Color'), 

124 required=False 

125 ) 

126 

127 

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) 

226 

227 

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) 

280 

281 

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) 

290 

291 

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) 

319 

320 

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) 

329 

330 color = ColorField( 

331 label=_('Color'), 

332 required=False 

333 ) 

334 

335 

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) 

378 

379 

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)