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

1from django.contrib.contenttypes.models import ContentType 

2from django.db.models import Q 

3from django_filters import CharFilter, ModelMultipleChoiceFilter 

4 

5from apis_core.apis_relations.models import Property 

6from apis_core.generic.filtersets import GenericFilterSet, GenericFilterSetForm 

7 

8PROPERTY_EXCLUDES = [ 

9 "self_contenttype", 

10 "property_class_uri", 

11 "rootobject_ptr", 

12] 

13 

14 

15class PropertyFilterSetForm(GenericFilterSetForm): 

16 columns_exclude = PROPERTY_EXCLUDES 

17 

18 

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 ) 

24 

25 

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() 

31 

32 class Meta: 

33 form = PropertyFilterSetForm 

34 exclude = PROPERTY_EXCLUDES 

35 

36 

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 ) 

48 

49 def subj_icontains(self, queryset, name, value): 

50 return queryset.filter(subj__name__icontains=value) 

51 

52 def obj_icontains(self, queryset, name, value): 

53 return queryset.filter(obj__name__icontains=value) 

54 

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 

61 

62 

63class HistoricalTripleFilterSet(TripleFilterSet): 

64 pass 

65 

66 

67class HistoricalTempTripleFilterSet(TripleFilterSet): 

68 pass