Coverage for users/filtersets.py: 72%
113 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
3from django.utils.translation import gettext as _
5from core.models import ObjectType
6from extras.models import NotificationGroup
7from netbox.filtersets import BaseFilterSet
8from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User
9from utilities.filters import MultiValueContentTypeFilter
10from utilities.filtersets import register_filterset
12__all__ = (
13 'GroupFilterSet',
14 'ObjectPermissionFilterSet',
15 'OwnerFilterSet',
16 'OwnerGroupFilterSet',
17 'TokenFilterSet',
18 'UserFilterSet',
19)
22@register_filterset
23class GroupFilterSet(BaseFilterSet):
24 q = django_filters.CharFilter(
25 method='search',
26 label=_('Search'),
27 )
28 user_id = django_filters.ModelMultipleChoiceFilter(
29 field_name='user',
30 queryset=User.objects.all(),
31 label=_('User (ID)'),
32 )
33 owner_id = django_filters.ModelMultipleChoiceFilter(
34 field_name='owner',
35 queryset=Owner.objects.all(),
36 label=_('Owner (ID)'),
37 )
38 owner = django_filters.ModelMultipleChoiceFilter(
39 field_name='owner__name',
40 queryset=Owner.objects.all(),
41 to_field_name='name',
42 label=_('Owner (name)'),
43 )
44 permission_id = django_filters.ModelMultipleChoiceFilter(
45 field_name='object_permissions',
46 queryset=ObjectPermission.objects.all(),
47 label=_('Permission (ID)'),
48 )
49 notification_group_id = django_filters.ModelMultipleChoiceFilter(
50 field_name='notification_groups',
51 queryset=NotificationGroup.objects.all(),
52 label=_('Notification group (ID)'),
53 )
55 class Meta:
56 model = Group
57 fields = ('id', 'name', 'description')
59 def search(self, queryset, name, value):
60 if not value.strip():
61 return queryset
62 return queryset.filter(
63 Q(name__icontains=value) |
64 Q(description__icontains=value)
65 )
68@register_filterset
69class UserFilterSet(BaseFilterSet):
70 q = django_filters.CharFilter(
71 method='search',
72 label=_('Search'),
73 )
74 group_id = django_filters.ModelMultipleChoiceFilter(
75 field_name='groups',
76 queryset=Group.objects.all(),
77 label=_('Group'),
78 )
79 group = django_filters.ModelMultipleChoiceFilter(
80 field_name='groups__name',
81 queryset=Group.objects.all(),
82 to_field_name='name',
83 label=_('Group (name)'),
84 )
85 owner_id = django_filters.ModelMultipleChoiceFilter(
86 field_name='owner',
87 queryset=Owner.objects.all(),
88 label=_('Owner (ID)'),
89 )
90 owner = django_filters.ModelMultipleChoiceFilter(
91 field_name='owner__name',
92 queryset=Owner.objects.all(),
93 to_field_name='name',
94 label=_('Owner (name)'),
95 )
96 permission_id = django_filters.ModelMultipleChoiceFilter(
97 field_name='object_permissions',
98 queryset=ObjectPermission.objects.all(),
99 label=_('Permission (ID)'),
100 )
101 notification_group_id = django_filters.ModelMultipleChoiceFilter(
102 field_name='notification_groups',
103 queryset=NotificationGroup.objects.all(),
104 label=_('Notification group (ID)'),
105 )
107 class Meta:
108 model = User
109 fields = (
110 'id', 'username', 'first_name', 'last_name', 'email', 'date_joined', 'last_login', 'is_active',
111 'is_superuser',
112 )
114 def search(self, queryset, name, value):
115 if not value.strip():
116 return queryset
117 return queryset.filter(
118 Q(username__icontains=value) |
119 Q(first_name__icontains=value) |
120 Q(last_name__icontains=value) |
121 Q(email__icontains=value)
122 )
125@register_filterset
126class TokenFilterSet(BaseFilterSet):
127 q = django_filters.CharFilter(
128 method='search',
129 label=_('Search'),
130 )
131 user_id = django_filters.ModelMultipleChoiceFilter(
132 field_name='user',
133 queryset=User.objects.all(),
134 distinct=False,
135 label=_('User'),
136 )
137 user = django_filters.ModelMultipleChoiceFilter(
138 field_name='user__username',
139 queryset=User.objects.all(),
140 distinct=False,
141 to_field_name='username',
142 label=_('User (name)'),
143 )
144 created = django_filters.DateTimeFilter()
145 created__gte = django_filters.DateTimeFilter(
146 field_name='created',
147 lookup_expr='gte'
148 )
149 created__lte = django_filters.DateTimeFilter(
150 field_name='created',
151 lookup_expr='lte'
152 )
153 expires = django_filters.DateTimeFilter()
154 expires__gte = django_filters.DateTimeFilter(
155 field_name='expires',
156 lookup_expr='gte'
157 )
158 expires__lte = django_filters.DateTimeFilter(
159 field_name='expires',
160 lookup_expr='lte'
161 )
162 last_used = django_filters.DateTimeFilter()
163 last_used__gte = django_filters.DateTimeFilter(
164 field_name='last_used',
165 lookup_expr='gte'
166 )
167 last_used__lte = django_filters.DateTimeFilter(
168 field_name='last_used',
169 lookup_expr='lte'
170 )
172 class Meta:
173 model = Token
174 fields = (
175 'id', 'version', 'key', 'pepper_id', 'enabled', 'write_enabled',
176 'description', 'created', 'expires', 'last_used',
177 )
179 def search(self, queryset, name, value):
180 if not value.strip():
181 return queryset
182 return queryset.filter(
183 Q(key=value) |
184 Q(user__username__icontains=value) |
185 Q(description__icontains=value)
186 )
189@register_filterset
190class ObjectPermissionFilterSet(BaseFilterSet):
191 q = django_filters.CharFilter(
192 method='search',
193 label=_('Search'),
194 )
195 object_type_id = django_filters.ModelMultipleChoiceFilter(
196 queryset=ObjectType.objects.all(),
197 field_name='object_types'
198 )
199 object_type = MultiValueContentTypeFilter(
200 field_name='object_types'
201 )
202 can_view = django_filters.BooleanFilter(
203 method='_check_action'
204 )
205 can_add = django_filters.BooleanFilter(
206 method='_check_action'
207 )
208 can_change = django_filters.BooleanFilter(
209 method='_check_action'
210 )
211 can_delete = django_filters.BooleanFilter(
212 method='_check_action'
213 )
214 user_id = django_filters.ModelMultipleChoiceFilter(
215 field_name='users',
216 queryset=User.objects.all(),
217 label=_('User'),
218 )
219 user = django_filters.ModelMultipleChoiceFilter(
220 field_name='users__username',
221 queryset=User.objects.all(),
222 to_field_name='username',
223 label=_('User (name)'),
224 )
225 group_id = django_filters.ModelMultipleChoiceFilter(
226 field_name='groups',
227 queryset=Group.objects.all(),
228 label=_('Group'),
229 )
230 group = django_filters.ModelMultipleChoiceFilter(
231 field_name='groups__name',
232 queryset=Group.objects.all(),
233 to_field_name='name',
234 label=_('Group (name)'),
235 )
237 class Meta:
238 model = ObjectPermission
239 fields = ('id', 'name', 'enabled', 'object_types', 'description')
241 def search(self, queryset, name, value):
242 if not value.strip():
243 return queryset
244 return queryset.filter(
245 Q(name__icontains=value) |
246 Q(description__icontains=value)
247 )
249 def _check_action(self, queryset, name, value):
250 action = name.split('_')[1]
251 if value:
252 return queryset.filter(actions__contains=[action])
253 return queryset.exclude(actions__contains=[action])
256@register_filterset
257class OwnerGroupFilterSet(BaseFilterSet):
258 q = django_filters.CharFilter(
259 method='search',
260 label=_('Search'),
261 )
263 class Meta:
264 model = OwnerGroup
265 fields = ('id', 'name', 'description')
267 def search(self, queryset, name, value):
268 if not value.strip():
269 return queryset
270 return queryset.filter(
271 Q(name__icontains=value) |
272 Q(description__icontains=value)
273 )
276@register_filterset
277class OwnerFilterSet(BaseFilterSet):
278 q = django_filters.CharFilter(
279 method='search',
280 label=_('Search'),
281 )
282 group_id = django_filters.ModelMultipleChoiceFilter(
283 queryset=OwnerGroup.objects.all(),
284 distinct=False,
285 label=_('Group (ID)'),
286 )
287 group = django_filters.ModelMultipleChoiceFilter(
288 field_name='group__name',
289 queryset=OwnerGroup.objects.all(),
290 distinct=False,
291 to_field_name='name',
292 label=_('Group (name)'),
293 )
294 user_group_id = django_filters.ModelMultipleChoiceFilter(
295 field_name='user_groups',
296 queryset=Group.objects.all(),
297 label=_('User group (ID)'),
298 )
299 user_group = django_filters.ModelMultipleChoiceFilter(
300 field_name='user_groups__name',
301 queryset=Group.objects.all(),
302 to_field_name='name',
303 label=_('User group (name)'),
304 )
305 user_id = django_filters.ModelMultipleChoiceFilter(
306 field_name='users',
307 queryset=User.objects.all(),
308 label=_('User (ID)'),
309 )
310 user = django_filters.ModelMultipleChoiceFilter(
311 field_name='users__username',
312 queryset=User.objects.all(),
313 to_field_name='username',
314 label=_('User (username)'),
315 )
317 class Meta:
318 model = Owner
319 fields = ('id', 'name', 'description')
321 def search(self, queryset, name, value):
322 if not value.strip():
323 return queryset
324 return queryset.filter(
325 Q(name__icontains=value) |
326 Q(description__icontains=value)
327 )