Coverage for website/events/api/v2/filters.py: 80.56%
28 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
3from utils.snippets import extract_date_range
6class EventDateFilter(filters.BaseFilterBackend):
7 """Allows you to filter by event start/end dates."""
9 def filter_queryset(self, request, queryset, view):
10 start, end = extract_date_range(request, allow_empty=True)
12 if start is not None:
13 queryset = queryset.filter(end__gte=start)
14 if end is not None:
15 queryset = queryset.filter(start__lte=end)
17 return queryset
19 def get_schema_operation_parameters(self, view):
20 return [
21 {
22 "name": "start",
23 "required": False,
24 "in": "query",
25 "description": "Filter events by ISO date, starting with this parameter (i.e. 2021-03-30T04:20:00) where `event.end >= value`",
26 "schema": {
27 "type": "string",
28 },
29 },
30 {
31 "name": "end",
32 "required": False,
33 "in": "query",
34 "description": "Filter events by ISO date, ending with this parameter (i.e. 2021-05-16T13:37:00) where `event.start <= value`",
35 "schema": {
36 "type": "string",
37 },
38 },
39 ]
42class CategoryFilter(filters.BaseFilterBackend):
43 """Allows you to filter by category."""
45 def filter_queryset(self, request, queryset, view):
46 category = request.query_params.get("category", None)
48 if category: 48 ↛ 49line 48 didn't jump to line 49 because the condition on line 48 was never true
49 queryset = queryset.filter(category__in=category.split(","))
51 return queryset
53 def get_schema_operation_parameters(self, view):
54 return [
55 {
56 "name": "category",
57 "required": False,
58 "in": "query",
59 "description": "Filter by category, accepts a comma separated list",
60 "schema": {
61 "type": "string",
62 },
63 }
64 ]
67class OrganiserFilter(filters.BaseFilterBackend):
68 """Allows you to filter by organiser id."""
70 def filter_queryset(self, request, queryset, view):
71 organiser = request.query_params.get("organiser", None)
73 if organiser: 73 ↛ 74line 73 didn't jump to line 74 because the condition on line 73 was never true
74 queryset = queryset.filter(organisers__in=[organiser])
76 return queryset
78 def get_schema_operation_parameters(self, view):
79 return [
80 {
81 "name": "organiser",
82 "required": False,
83 "in": "query",
84 "description": "Filter by organiser id",
85 "schema": {
86 "type": "number",
87 },
88 }
89 ]