Skip to content
Snippets Groups Projects
Commit d72df7c1 authored by Konrad Mohrfeldt's avatar Konrad Mohrfeldt :koala:
Browse files

fix: restore filter backends

In aa7e7f41 filters were renamed
to a camelCase scheme. This is actually wrong, because the filter
names are already transformed to snake_case when the are applied
to the FilterSet.
parent c7e65ca9
No related branches found
No related tags found
No related merge requests found
......@@ -39,17 +39,19 @@ class IntegerInFilter(filters.BaseInFilter):
class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
categoryIds = IntegerInFilter(
category_ids = IntegerInFilter(
field_name="category",
help_text="Return only shows of the given category or categories.",
)
categorySlug = filters.CharFilter(
field_name="category", help_text="Return only shows of the given category slug."
category_slug = filters.CharFilter(
field_name="category__slug",
help_text="Return only shows of the given category slug.",
)
hostIds = IntegerInFilter(
host_ids = IntegerInFilter(
field_name="hosts",
help_text="Return only shows assigned to the given host(s).",
)
isActive = filters.BooleanFilter(
is_active = filters.BooleanFilter(
field_name="is_active",
method="filter_active",
help_text=(
......@@ -57,35 +59,41 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
"or past or upcoming shows if false."
),
)
isPublic = filters.BooleanFilter(
is_public = filters.BooleanFilter(
field_name="is_public",
help_text="Return only shows that are public/non-public.",
)
languageIds = IntegerInFilter(
language_ids = IntegerInFilter(
field_name="language",
help_text="Return only shows of the given language(s).",
)
musicFocusIds = IntegerInFilter(
music_focus_ids = IntegerInFilter(
field_name="music_focus",
help_text="Return only shows with given music focus(es).",
)
musicFocusSlug = filters.CharFilter(
field_name="music_focus", help_text="Return only shows with the give music focus slug."
music_focus_slug = filters.CharFilter(
field_name="music_focus__slug",
help_text="Return only shows with the give music focus slug.",
)
ownerIds = IntegerInFilter(
owner_ids = IntegerInFilter(
field_name="owners",
help_text="Return only shows that belong to the given owner(s).",
)
topicIds = IntegerInFilter(
topic_ids = IntegerInFilter(
field_name="topic",
help_text="Return only shows of the given topic(s).",
)
topicSlug = filters.CharFilter(
field_name="topic", help_text="Return only shows of the given topic slug."
topic_slug = filters.CharFilter(
field_name="topic__slug",
help_text="Return only shows of the given topic slug.",
)
typeId = IntegerInFilter(
type_id = IntegerInFilter(
field_name="type",
help_text="Return only shows of a given type.",
)
typeSlug = filters.CharFilter(
field_name="type", help_text="Return only shows of the given type slug."
type_slug = filters.CharFilter(
field_name="type__slug",
help_text="Return only shows of the given type slug.",
)
def filter_active(self, queryset: QuerySet, name: str, value: bool):
......@@ -116,31 +124,22 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
else:
return queryset.exclude(id__in=show_ids, is_active=True)
@property
def qs(self):
# allow pagination query parameters in the GET request
fields = self.Meta.fields + ["limit", "offset"]
if any([key for key in self.request.GET.keys() if key not in fields]):
return None
else:
return super().qs
class Meta:
model = models.Show
fields = [
"categoryIds",
"categorySlug",
"hostIds",
"isActive",
"isPublic",
"languageIds",
"musicFocusIds",
"musicFocusSlug",
"ownerIds",
"topicIds",
"topicSlug",
"typeId",
"typeSlug",
"category_ids",
"category_slug",
"host_ids",
"is_active",
"is_public",
"language_ids",
"music_focus_ids",
"music_focus_slug",
"owner_ids",
"topic_ids",
"topic_slug",
"type_id",
"type_slug",
]
......@@ -174,12 +173,12 @@ class TimeSlotFilterSet(filters.FilterSet):
),
)
scheduleIds = IntegerInFilter(
schedule_ids = IntegerInFilter(
field_name="schedule",
help_text="Return only timeslots that belong to the specified schedule(s).",
)
showIds = IntegerInFilter(
show_ids = IntegerInFilter(
field_name="schedule__show",
help_text="Return only timeslots that belong to the specified show(s).",
)
......@@ -241,6 +240,8 @@ class TimeSlotFilterSet(filters.FilterSet):
"start",
"end",
"surrounding",
"schedule_ids",
"show_ids",
]
......@@ -249,41 +250,38 @@ class NoteFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
field_name="id",
help_text="Return only notes matching the specified id(s).",
)
ownerIds = IntegerInFilter(
owner_ids = IntegerInFilter(
field_name="owner",
help_text="Return only notes that belong to the specified owner(s).",
)
showIds = IntegerInFilter(
show_ids = IntegerInFilter(
field_name="timeslot__show",
help_text="Return only notes that belong to the specified show(s).",
)
showOwnerIds = IntegerInFilter(
show_owner_ids = IntegerInFilter(
field_name="timeslot__show__owners",
help_text="Return only notes by show the specified owner(s): all notes the user may edit.",
)
timeslotIds = IntegerInFilter(
timeslot_ids = IntegerInFilter(
field_name="timeslot",
help_text="Return only notes that belong to the specified timeslot(s).",
)
class Meta:
model = models.Note
help_texts = {
"ownerId": "Return only notes created by the specified user.",
}
fields = [
"ids",
"ownerIds",
"showIds",
"showOwnerIds",
"timeslotIds",
"owner_ids",
"show_ids",
"show_owner_ids",
"timeslot_ids",
]
class ActiveFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
isActive = filters.BooleanFilter(field_name="is_active")
is_active = filters.BooleanFilter(field_name="is_active")
class Meta:
fields = [
"isActive",
"is_active",
]
......@@ -32,9 +32,8 @@ from rest_framework.pagination import LimitOffsetPagination
from rest_framework.response import Response
from django.contrib.auth.models import User
from django.core.exceptions import FieldError
from django.http import Http404, HttpResponse
from django.shortcuts import get_list_or_404, get_object_or_404
from django.shortcuts import get_object_or_404
from django.utils import timezone
from django.utils.translation import gettext as _
from program import filters
......@@ -376,42 +375,6 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet):
pagination_class = LimitOffsetPagination
filterset_class = filters.ShowFilterSet
def list(self, request, *args, **kwargs):
filter_kwargs = {}
for key, value in request.query_params.items():
# map query parameters to filter names
if value == "":
pass
elif key == "host_ids" or key == "owner_ids":
if value.count(",") > 0:
filter_kwargs[f"{key[:-4]}s__id__in"] = value.split(",")
else:
filter_kwargs[f"{key[:-4]}s__id"] = value
elif key.endswith("_ids"):
if value.count(",") > 0:
filter_kwargs[f"{key[:-4]}__id__in"] = value.split(",")
else:
filter_kwargs[f"{key[:-4]}__id"] = value
elif key.endswith("_id"):
filter_kwargs[f"{key[:-3]}__id"] = value
elif key.endswith("_slug"):
filter_kwargs[f"{key[:-5]}__slug"] = value
else:
filter_kwargs[key] = value
try:
queryset = get_list_or_404(self.get_queryset(), **filter_kwargs)
except FieldError:
queryset = None
if page := self.paginate_queryset(queryset) is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
lookup_url_kwarg = self.lookup_url_kwarg or self.lookup_field
......@@ -808,49 +771,6 @@ class APINoteViewSet(
pagination_class = LimitOffsetPagination
filterset_class = filters.NoteFilterSet
def list(self, request, *args, **kwargs):
filter_kwargs = {}
# map query parameters to filter names
for key, value in request.query_params.items():
if value == "":
pass
elif key == "ids":
if value.count(",") > 0:
filter_kwargs["id__in"] = value.split(",")
else:
filter_kwargs["id"] = value
elif key == "show_ids":
if value.count(",") > 0:
filter_kwargs["timeslot__show__in"] = value.split(",")
else:
filter_kwargs["timeslot__show"] = value
elif key == "show_owner_ids":
if value.count(",") > 0:
filter_kwargs["timeslot__show__owners__in"] = value.split(",")
else:
filter_kwargs["timeslot__show__owners"] = value
elif key.endswith("_ids"):
if value.count(",") > 0:
filter_kwargs[f"{key[:-4]}__in"] = value.split(",")
else:
filter_kwargs[f"{key[:-4]}"] = value
else:
filter_kwargs[key] = value
try:
queryset = get_list_or_404(self.get_queryset(), **filter_kwargs)
except FieldError:
queryset = None
if page := self.paginate_queryset(queryset) is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
def get_serializer_context(self):
# the serializer needs the request in the context
context = super().get_serializer_context()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment