Coverage for apis_core/apis_relations/filtersets.py: 0%
37 statements
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-16 07:42 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2024-09-16 07:42 +0000
1from django.contrib.contenttypes.models import ContentType
2from django.db.models import Q
3from django_filters import CharFilter, ModelMultipleChoiceFilter
5from apis_core.apis_relations.models import Property
6from apis_core.generic.filtersets import GenericFilterSet, GenericFilterSetForm
8PROPERTY_EXCLUDES = [
9 "self_contenttype",
10 "property_class_uri",
11 "rootobject_ptr",
12]
15class PropertyFilterSetForm(GenericFilterSetForm):
16 columns_exclude = PROPERTY_EXCLUDES
19class PropertySubjObjFilter(ModelMultipleChoiceFilter):
20 def get_queryset(self, request):
21 return ContentType.objects.filter(
22 pk__in=Property.objects.all().values(self.field_name)
23 )
26class PropertyFilterSet(GenericFilterSet):
27 name_forward = CharFilter(lookup_expr="icontains")
28 name_reverse = CharFilter(lookup_expr="icontains")
29 subj_class = PropertySubjObjFilter()
30 obj_class = PropertySubjObjFilter()
32 class Meta:
33 form = PropertyFilterSetForm
34 exclude = PROPERTY_EXCLUDES
37class TripleFilterSet(GenericFilterSet):
38 subj = CharFilter(method="subj_icontains")
39 obj = CharFilter(method="obj_icontains")
40 subj_class = PropertySubjObjFilter(
41 label="Subj class",
42 method="class_in",
43 )
44 obj_class = PropertySubjObjFilter(
45 label="Obj class",
46 method="class_in",
47 )
49 def subj_icontains(self, queryset, name, value):
50 return queryset.filter(subj__name__icontains=value)
52 def obj_icontains(self, queryset, name, value):
53 return queryset.filter(obj__name__icontains=value)
55 def class_in(self, queryset, name, value):
56 # value is the list of contenttypes
57 if value and name:
58 name, _ = name.split("_")
59 return queryset.filter(Q(**{f"{name}__self_contenttype__in": value}))
60 return queryset
63class HistoricalTripleFilterSet(TripleFilterSet):
64 pass
67class HistoricalTempTripleFilterSet(TripleFilterSet):
68 pass