Coverage for website/events/api/v2/admin/filters.py: 24.00%
40 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from rest_framework import filters
2from rest_framework.exceptions import ValidationError
4from utils.snippets import strtobool
7class PublishedFilter(filters.BaseFilterBackend):
8 """Allows you to filter by published status."""
10 def filter_queryset(self, request, queryset, view):
11 published = request.query_params.get("published", None)
13 if published is not None:
14 try:
15 queryset = queryset.filter(published=strtobool(published))
16 except ValueError as e:
17 raise ValidationError({"published": "Invalid filter value."}) from e
19 return queryset
21 def get_schema_operation_parameters(self, view):
22 return [
23 {
24 "name": "published",
25 "required": False,
26 "in": "query",
27 "description": "Filter by published status",
28 "schema": {
29 "type": "boolean",
30 },
31 }
32 ]
35class EventRegistrationCancelledFilter(filters.BaseFilterBackend):
36 """Allows you to filter by event registration cancellation status."""
38 def filter_queryset(self, request, queryset, view):
39 cancelled = request.query_params.get("cancelled", None)
41 if cancelled is None:
42 return queryset
44 try:
45 if strtobool(cancelled):
46 return queryset.exclude(date_cancelled=None)
47 except ValueError as e:
48 raise ValidationError({"cancelled": "Invalid filter value."}) from e
50 return queryset.filter(date_cancelled=None)
52 def get_schema_operation_parameters(self, view):
53 return [
54 {
55 "name": "cancelled",
56 "required": False,
57 "in": "query",
58 "description": "Filter by event registration cancellation status",
59 "schema": {
60 "type": "boolean",
61 },
62 }
63 ]
66class EventRegistrationQueuedFilter(filters.BaseFilterBackend):
67 """Allows you to filter by event registration by if they're in the queue."""
69 def filter_queryset(self, request, queryset, view):
70 queued = request.query_params.get("queued", None)
72 if queued is None:
73 return queryset
75 try:
76 if strtobool(queued):
77 return queryset.exclude(queue_position=None)
78 except ValueError as e:
79 raise ValidationError({"queued": "Invalid filter value."}) from e
81 return queryset.filter(queue_position=None)
83 def get_schema_operation_parameters(self, view):
84 return [
85 {
86 "name": "queued",
87 "required": False,
88 "in": "query",
89 "description": "Filter by event registration queue position",
90 "schema": {
91 "type": "boolean",
92 },
93 }
94 ]