From 8d3fba6b339652394be2b7319fb2fa93259d72a4 Mon Sep 17 00:00:00 2001 From: Calum Mackervoy <c.mackervoy@gmail.com> Date: Wed, 8 Apr 2020 20:51:59 +0100 Subject: [PATCH] added FilterBackends for local objects --- djangoldp/filters.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 djangoldp/filters.py diff --git a/djangoldp/filters.py b/djangoldp/filters.py new file mode 100644 index 00000000..59afd6b9 --- /dev/null +++ b/djangoldp/filters.py @@ -0,0 +1,23 @@ +from rest_framework.filters import BaseFilterBackend +from djangoldp.models import Model + + +class LocalObjectFilterBackend(BaseFilterBackend): + """ + Filter which removes external objects (federated backlinks) from the queryset + For querysets which should only include local objects + """ + def filter_queryset(self, request, queryset, view): + internal_ids = [x.pk for x in queryset if not Model.is_external(x)] + return queryset.filter(pk__in=internal_ids) + + +class LocalObjectOnContainerPathBackend(LocalObjectFilterBackend): + """ + Override of LocalObjectFilterBackend which removes external objects when the view requested + is the model container path + """ + def filter_queryset(self, request, queryset, view): + if issubclass(view.model, Model) and request.path_info == view.model.get_container_path(): + return super(LocalObjectOnContainerPathBackend, self).filter_queryset(request, queryset, view) + return queryset -- GitLab