Coverage for webpage/utils.py: 65%

82 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2024-07-27 11:19 +0000

1import django_filters 

2from django.views.generic.edit import CreateView, UpdateView 

3from crispy_forms.helper import FormHelper 

4from crispy_forms.layout import Submit, Layout, Fieldset, Div, MultiField, HTML 

5from django_tables2 import SingleTableView, RequestConfig 

6 

7 

8def serialize(modelclass): 

9 """returns the field values of a model as list""" 

10 fields = modelclass._meta.get_fields() 

11 serialized = [] 

12 for x in fields: 

13 if x.get_internal_type() == "ManyToManyField": 

14 attrs = getattr(modelclass, x.name) 

15 values = "|".join([y[1] for y in attrs.values_list()]) 

16 key_value = values 

17 else: 

18 key_value = getattr(modelclass, x.name) 

19 serialized.append(key_value) 

20 return serialized 

21 

22 

23class GenericFilterFormHelper(FormHelper): 

24 def __init__(self, *args, **kwargs): 

25 super(GenericFilterFormHelper, self).__init__(*args, **kwargs) 

26 self.helper = FormHelper() 

27 self.form_class = "genericFilterForm" 

28 self.form_method = "GET" 

29 self.helper.form_tag = False 

30 self.add_input(Submit("Filter", "Search")) 

31 

32 

33django_filters.filters.LOOKUP_TYPES = [ 

34 ("", "---------"), 

35 ("exact", "Is equal to"), 

36 ("iexact", "Is equal to (case insensitive)"), 

37 ("not_exact", "Is not equal to"), 

38 ("lt", "Lesser than/before"), 

39 ("gt", "Greater than/after"), 

40 ("gte", "Greater than or equal to"), 

41 ("lte", "Lesser than or equal to"), 

42 ("startswith", "Starts with"), 

43 ("endswith", "Ends with"), 

44 ("contains", "Contains"), 

45 ("icontains", "Contains (case insensitive)"), 

46 ("not_contains", "Does not contain"), 

47] 

48 

49 

50class GenericListView(SingleTableView): 

51 filter_class = None 

52 formhelper_class = None 

53 context_filter_name = "filter" 

54 paginate_by = 25 

55 template_name = "browsing/generic_list.html" 

56 

57 def get_queryset(self, **kwargs): 

58 qs = super(GenericListView, self).get_queryset() 

59 self.filter = self.filter_class(self.request.GET, queryset=qs) 

60 self.filter.form.helper = self.formhelper_class() 

61 return self.filter.qs 

62 

63 def get_table(self, **kwargs): 

64 table = super(GenericListView, self).get_table() 

65 RequestConfig( 

66 self.request, paginate={"page": 1, "per_page": self.paginate_by} 

67 ).configure(table) 

68 return table 

69 

70 def get_context_data(self, **kwargs): 

71 context = super(GenericListView, self).get_context_data() 

72 context[self.context_filter_name] = self.filter 

73 context["docstring"] = "{}".format(self.model.__doc__) 

74 if self.model.__name__.endswith("s"): 

75 context["class_name"] = "{}".format(self.model.__name__) 

76 else: 

77 context["class_name"] = "{}s".format(self.model.__name__) 

78 try: 

79 context["get_arche_dump"] = self.model.get_arche_dump() 

80 except AttributeError: 

81 context["get_arche_dump"] = None 

82 try: 

83 context["create_view_link"] = self.model.get_createview_url() 

84 except AttributeError: 

85 context["create_view_link"] = None 

86 try: 

87 context["dl_csv_link"] = self.model.dl_csv_link() 

88 except AttributeError: 

89 context["dl_csv_link"] = None 

90 return context 

91 

92 

93class BaseCreateView(CreateView): 

94 model = None 

95 form_class = None 

96 template_name = "browsing/generic_create.html" 

97 

98 def get_context_data(self, **kwargs): 

99 context = super(BaseCreateView, self).get_context_data() 

100 context["docstring"] = "{}".format(self.model.__doc__) 

101 if self.model.__name__.endswith("s"): 

102 context["class_name"] = "{}".format(self.model.__name__) 

103 else: 

104 context["class_name"] = "{}s".format(self.model.__name__) 

105 return context 

106 

107 

108class BaseUpdateView(UpdateView): 

109 model = None 

110 form_class = None 

111 template_name = "browsing/generic_create.html" 

112 

113 def get_context_data(self, **kwargs): 

114 context = super(BaseUpdateView, self).get_context_data() 

115 context["docstring"] = "{}".format(self.model.__doc__) 

116 if self.model.__name__.endswith("s"): 

117 context["class_name"] = "{}".format(self.model.__name__) 

118 else: 

119 context["class_name"] = "{}s".format(self.model.__name__) 

120 return context