Coverage for wireless/filtersets.py: 79%
54 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
1import django_filters
2from django.db.models import Q
4from dcim.base_filtersets import ScopedFilterSet
5from dcim.choices import LinkStatusChoices
6from dcim.models import Interface
7from ipam.models import VLAN
8from netbox.filtersets import NestedGroupModelFilterSet, PrimaryModelFilterSet
9from tenancy.filtersets import TenancyFilterSet
10from utilities.filters import TreeNodeMultipleChoiceFilter
11from utilities.filtersets import register_filterset
13from .choices import *
14from .models import *
16__all__ = (
17 'WirelessLANFilterSet',
18 'WirelessLANGroupFilterSet',
19 'WirelessLinkFilterSet',
20)
23@register_filterset
24class WirelessLANGroupFilterSet(NestedGroupModelFilterSet):
25 parent_id = django_filters.ModelMultipleChoiceFilter(
26 queryset=WirelessLANGroup.objects.all(),
27 distinct=False,
28 )
29 parent = django_filters.ModelMultipleChoiceFilter(
30 field_name='parent__slug',
31 queryset=WirelessLANGroup.objects.all(),
32 distinct=False,
33 to_field_name='slug'
34 )
35 ancestor_id = TreeNodeMultipleChoiceFilter(
36 queryset=WirelessLANGroup.objects.all(),
37 field_name='parent',
38 lookup_expr='in'
39 )
40 ancestor = TreeNodeMultipleChoiceFilter(
41 queryset=WirelessLANGroup.objects.all(),
42 field_name='parent',
43 lookup_expr='in',
44 to_field_name='slug'
45 )
47 class Meta:
48 model = WirelessLANGroup
49 fields = ('id', 'name', 'slug', 'description')
52@register_filterset
53class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet):
54 group_id = TreeNodeMultipleChoiceFilter(
55 queryset=WirelessLANGroup.objects.all(),
56 field_name='group',
57 lookup_expr='in'
58 )
59 group = TreeNodeMultipleChoiceFilter(
60 queryset=WirelessLANGroup.objects.all(),
61 field_name='group',
62 lookup_expr='in',
63 to_field_name='slug'
64 )
65 status = django_filters.MultipleChoiceFilter(
66 choices=WirelessLANStatusChoices,
67 distinct=False,
68 )
69 vlan_id = django_filters.ModelMultipleChoiceFilter(
70 queryset=VLAN.objects.all(),
71 distinct=False,
72 )
73 interface_id = django_filters.ModelMultipleChoiceFilter(
74 queryset=Interface.objects.all(),
75 field_name='interfaces'
76 )
77 auth_type = django_filters.MultipleChoiceFilter(
78 choices=WirelessAuthTypeChoices,
79 distinct=False,
80 )
81 auth_cipher = django_filters.MultipleChoiceFilter(
82 choices=WirelessAuthCipherChoices,
83 distinct=False,
84 )
86 class Meta:
87 model = WirelessLAN
88 fields = ('id', 'ssid', 'auth_psk', 'scope_id', 'description')
90 def search(self, queryset, name, value):
91 if not value.strip():
92 return queryset
93 qs_filter = (
94 Q(ssid__icontains=value) |
95 Q(description__icontains=value)
96 )
97 return queryset.filter(qs_filter)
100@register_filterset
101class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
102 interface_a_id = django_filters.ModelMultipleChoiceFilter(
103 queryset=Interface.objects.all(),
104 distinct=False,
105 )
106 interface_b_id = django_filters.ModelMultipleChoiceFilter(
107 queryset=Interface.objects.all(),
108 distinct=False,
109 )
110 status = django_filters.MultipleChoiceFilter(
111 choices=LinkStatusChoices,
112 distinct=False,
113 )
114 auth_type = django_filters.MultipleChoiceFilter(
115 choices=WirelessAuthTypeChoices,
116 distinct=False,
117 )
118 auth_cipher = django_filters.MultipleChoiceFilter(
119 choices=WirelessAuthCipherChoices,
120 distinct=False,
121 )
123 class Meta:
124 model = WirelessLink
125 fields = ('id', 'ssid', 'auth_psk', 'distance', 'distance_unit', 'description')
127 def search(self, queryset, name, value):
128 if not value.strip():
129 return queryset
130 qs_filter = (
131 Q(ssid__icontains=value) |
132 Q(description__icontains=value)
133 )
134 return queryset.filter(qs_filter)