Coverage for website/activemembers/api/v2/filters.py: 27.78%
26 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 django.db.models import Q
3from rest_framework import filters
5from activemembers.models import Board, Committee, Society
6from utils.snippets import extract_date_range
9class MemberGroupTypeFilter(filters.BaseFilterBackend):
10 """Allows you to filter by organiser id."""
12 def filter_queryset(self, request, queryset, view):
13 type = request.query_params.get("type", None)
15 if type == "board":
16 queryset = queryset.filter(pk__in=Board.active_objects.values("pk"))
17 elif type == "committee":
18 queryset = queryset.filter(pk__in=Committee.active_objects.values("pk"))
19 elif type == "society":
20 queryset = queryset.filter(pk__in=Society.active_objects.values("pk"))
22 return queryset
24 def get_schema_operation_parameters(self, view):
25 return [
26 {
27 "name": "type",
28 "required": False,
29 "in": "query",
30 "description": "Filter by member group type",
31 "schema": {"type": "string", "enum": ["board", "committee", "society"]},
32 }
33 ]
36class MemberGroupDateFilter(filters.BaseFilterBackend):
37 """Allows you to filter by event start/end dates."""
39 def filter_queryset(self, request, queryset, view):
40 start, end = extract_date_range(request, allow_empty=True)
42 if start is not None:
43 queryset = queryset.filter(Q(until__isnull=True) | Q(until__gte=start))
44 if end is not None:
45 queryset = queryset.filter(Q(since__isnull=True) | Q(since__lte=end))
47 return queryset
49 def get_schema_operation_parameters(self, view):
50 return [
51 {
52 "name": "start",
53 "required": False,
54 "in": "query",
55 "description": "Filter member groups by ISO date, starting with this parameter (e.g. 2021-03-30T04:20:00) where `group.until >= value`",
56 "schema": {"type": "string", "format": "date-time"},
57 },
58 {
59 "name": "end",
60 "required": False,
61 "in": "query",
62 "description": "Filter member groups by ISO date, ending with this parameter (e.g. 2021-05-16T13:37:00) where `group.since <= value`",
63 "schema": {"type": "string", "format": "date-time"},
64 },
65 ]