Coverage for browsing/views.py: 48%
196 statements
« prev ^ index » next coverage.py v7.5.3, created at 2024-06-10 15:48 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2024-06-10 15:48 +0000
1import csv
2import time
3import datetime
4from django.http import HttpResponse
5from django_tables2 import SingleTableView, RequestConfig
7from .forms import GenericFilterFormHelper, MainListFilterFormHelper
10from burials.models import (
11 Burial,
12 BurialSite,
13 BurialGroup,
14 Urn,
15 UrnCover,
16 GraveGood,
17 GraveGoodOther,
18 DeadBodyRemains,
19 AnimalRemains,
20)
21from .tables import (
22 BurialTable,
23 BurialSiteTable,
24 BurialGroupTable,
25 UrnTable,
26 UrnCoverTable,
27 GraveGoodTable,
28 GraveGoodOtherTable,
29 DeadBodyRemainsTable,
30 AnimalRemainsTable,
31)
32from .filters import (
33 MainListFilter,
34 BurialListFilter,
35 BurialSiteListFilter,
36 BurialGroupListFilter,
37 UrnListFilter,
38 UrnCoverListFilter,
39 GraveGoodListFilter,
40 GraveGoodOtherListFilter,
41 DeadBodyRemainsListFilter,
42 AnimalRemainsListFilter,
43)
45from vocabs.models import SkosConcept
48class GenericListView(SingleTableView):
49 filter_class = None
50 formhelper_class = None
51 context_filter_name = "filter"
52 paginate_by = 25
54 def get_queryset(self, **kwargs):
55 qs = super(GenericListView, self).get_queryset()
56 self.filter = self.filter_class(self.request.GET, queryset=qs)
57 self.filter.form.helper = self.formhelper_class()
58 return self.filter.qs
60 def get_table(self, **kwargs):
61 table = super(GenericListView, self).get_table()
62 RequestConfig(
63 self.request, paginate={"page": 1, "per_page": self.paginate_by}
64 ).configure(table)
65 return table
67 def get_context_data(self, **kwargs):
68 context = super(GenericListView, self).get_context_data()
69 context[self.context_filter_name] = self.filter
70 return context
73class BurialSiteListView(GenericListView):
74 model = BurialSite
75 table_class = BurialSiteTable
76 template_name = "browsing/burialsite_list_generic.html"
77 filter_class = BurialSiteListFilter
78 formhelper_class = GenericFilterFormHelper
80 def get_context_data(self, **kwargs):
81 context = super(GenericListView, self).get_context_data()
82 context[self.context_filter_name] = self.filter
83 burialsite_names = []
84 for x in BurialSite.objects.all():
85 burialsite_names.append(x.name)
86 context["burialsite_names"] = set(burialsite_names)
88 alternative_names = []
89 for x in BurialSite.objects.all():
90 alternative_names.append(x.alternative_name)
91 context["alternative_names"] = set(alternative_names)
93 return context
96class BurialGroupListView(GenericListView):
97 model = BurialGroup
98 table_class = BurialGroupTable
99 template_name = "browsing/burialgroup_list_generic.html"
100 filter_class = BurialGroupListFilter
101 formhelper_class = GenericFilterFormHelper
103 def get_context_data(self, **kwargs):
104 context = super(GenericListView, self).get_context_data()
105 context[self.context_filter_name] = self.filter
106 burialsite_names = []
107 for x in BurialSite.objects.all():
108 burialsite_names.append(x.name)
109 context["burialsite_names"] = set(burialsite_names)
111 burialgroup_ids = []
112 for x in BurialGroup.objects.all():
113 burialgroup_ids.append(x.burial_group_id)
114 context["burialgroup_ids"] = set(burialgroup_ids)
116 return context
119class BurialListView(GenericListView):
120 model = Burial
121 table_class = BurialTable
122 template_name = "browsing/burial_list_generic.html"
123 filter_class = BurialListFilter
124 formhelper_class = GenericFilterFormHelper
126 def get_context_data(self, **kwargs):
127 context = super(GenericListView, self).get_context_data()
128 context[self.context_filter_name] = self.filter
129 burialsite_names = []
130 for x in BurialSite.objects.all():
131 burialsite_names.append(x.name)
132 context["burialsite_names"] = set(burialsite_names)
133 return context
136class UrnCoverListView(GenericListView):
137 model = UrnCover
138 table_class = UrnCoverTable
139 template_name = "browsing/urncover_list_generic.html"
140 filter_class = UrnCoverListFilter
141 formhelper_class = GenericFilterFormHelper
143 def get_context_data(self, **kwargs):
144 context = super(GenericListView, self).get_context_data()
145 context[self.context_filter_name] = self.filter
147 return context
150class UrnListView(GenericListView):
151 model = Urn
152 table_class = UrnTable
153 template_name = "browsing/urn_list_generic.html"
154 filter_class = UrnListFilter
155 formhelper_class = GenericFilterFormHelper
157 def get_context_data(self, **kwargs):
158 context = super(GenericListView, self).get_context_data()
159 context[self.context_filter_name] = self.filter
161 burialsite_names = []
162 for x in BurialSite.objects.all():
163 burialsite_names.append(x.name)
164 context["burialsite_names"] = set(burialsite_names)
166 return context
169class GraveGoodListView(GenericListView):
170 model = GraveGood
171 table_class = GraveGoodTable
172 template_name = "browsing/gravegood_list_generic.html"
173 filter_class = GraveGoodListFilter
174 formhelper_class = GenericFilterFormHelper
176 def get_context_data(self, **kwargs):
177 context = super(GenericListView, self).get_context_data()
178 context[self.context_filter_name] = self.filter
180 gravegood_names = []
181 for x in SkosConcept.objects.filter(scheme__dc_title__iexact="Grave good name"):
182 gravegood_names.append(x.pref_label)
183 context["gravegood_names"] = set(gravegood_names)
185 burialsite_names = []
186 for x in BurialSite.objects.all():
187 burialsite_names.append(x.name)
188 context["burialsite_names"] = set(burialsite_names)
190 return context
193class GraveGoodOtherListView(GenericListView):
194 model = GraveGoodOther
195 table_class = GraveGoodOtherTable
196 template_name = "browsing/gravegoodother_list_generic.html"
197 filter_class = GraveGoodOtherListFilter
198 formhelper_class = GenericFilterFormHelper
200 def get_context_data(self, **kwargs):
201 context = super(GenericListView, self).get_context_data()
202 context[self.context_filter_name] = self.filter
204 burialsite_names = []
205 for x in BurialSite.objects.all():
206 burialsite_names.append(x.name)
207 context["burialsite_names"] = set(burialsite_names)
209 return context
212class DeadBodyRemainsListView(GenericListView):
213 model = DeadBodyRemains
214 table_class = DeadBodyRemainsTable
215 template_name = "browsing/deadbodyremains_list_generic.html"
216 filter_class = DeadBodyRemainsListFilter
217 formhelper_class = GenericFilterFormHelper
219 def get_context_data(self, **kwargs):
220 context = super(GenericListView, self).get_context_data()
221 context[self.context_filter_name] = self.filter
223 burialsite_names = []
224 for x in BurialSite.objects.all():
225 burialsite_names.append(x.name)
226 context["burialsite_names"] = set(burialsite_names)
228 return context
231class AnimalRemainsListView(GenericListView):
232 model = AnimalRemains
233 table_class = AnimalRemainsTable
234 template_name = "browsing/animalremains_list_generic.html"
235 filter_class = AnimalRemainsListFilter
236 formhelper_class = GenericFilterFormHelper
238 def get_context_data(self, **kwargs):
239 context = super(GenericListView, self).get_context_data()
240 context[self.context_filter_name] = self.filter
242 burialsite_names = []
243 for x in BurialSite.objects.all():
244 burialsite_names.append(x.name)
245 context["burialsite_names"] = set(burialsite_names)
247 return context
250class MainListView(GenericListView):
251 model = Burial
252 table_class = BurialTable
253 template_name = "browsing/main_list_generic.html"
254 filter_class = MainListFilter
255 formhelper_class = MainListFilterFormHelper
257 def get_context_data(self, **kwargs):
258 context = super(MainListView, self).get_context_data()
259 context[self.context_filter_name] = self.filter
260 burialsites = []
261 for x in self.get_queryset():
262 burialsites.append(x.burial_site)
263 context["burialsites"] = set(burialsites)
265 burials = []
266 for x in self.get_queryset():
267 burials.append(x)
268 context["burials"] = set(burials)
269 return context
272class MainListDownloadView(GenericListView):
273 model = Burial
274 table_class = BurialTable
275 template_name = "browsing/main_list_generic.html"
276 filter_class = MainListFilter
277 formhelper_class = MainListFilterFormHelper
279 def render_to_response(self, context, **kwargs):
280 timestamp = datetime.datetime.fromtimestamp(time.time()).strftime(
281 "%Y-%m-%d-%H-%M-%S"
282 )
283 response = HttpResponse(content_type="text/csv")
284 filename = "cbab_export_{}".format(timestamp)
285 response["Content-Disposition"] = 'attachment; filename="{}.csv"'.format(
286 filename
287 )
288 writer = csv.writer(response, delimiter=",")
289 writer.writerow(
290 [
291 "Burial ID",
292 "Burial number",
293 "Burial site",
294 "Place name",
295 "Province",
296 "Geonames ID",
297 "Latitude",
298 "Longitude",
299 "Burial group",
300 "Burial type",
301 "Absolute dating (C14/Dendro)",
302 "Absolute age",
303 "Secondary burial",
304 "Secondary burial text",
305 "Displaced",
306 "Displaced text",
307 "Extraordinary burial",
308 "Extraordinary burial text",
309 "Inhumation burial type",
310 "Bi-ritual burial type",
311 "Construction",
312 "Arrangement",
313 "Cover",
314 "Cover type",
315 "Grave pit form",
316 "Grave pit orientation",
317 "Length",
318 "Width",
319 "Diameter",
320 "Heigth",
321 "Filling objects",
322 "Interntionally deposited",
323 "Filling",
324 "Post holes",
325 "Surface identification mark",
326 "Erdgraebchen",
327 "Other features",
328 "Urn",
329 "Grave good",
330 "Grave good amount",
331 "Anthropology",
332 "Anthropology amount",
333 "Organic grave good",
334 "Animal remains",
335 "Animal remains amount",
336 ]
337 )
338 for obj in self.get_queryset():
339 writer.writerow(
340 [
341 obj.id,
342 obj.burial_id,
343 obj.burial_site.name,
344 obj.burial_site.location.name,
345 obj.burial_site.location.province,
346 obj.burial_site.location.geonames_id,
347 obj.burial_site.lat,
348 obj.burial_site.lng,
349 obj.burial_group,
350 obj.burial_type,
351 obj.get_c14_dendro_display(),
352 obj.absolute_age,
353 obj.get_secondary_burial_display(),
354 obj.secondary_burial_text,
355 obj.get_displaced_display(),
356 obj.displaced_text,
357 obj.get_extraordinary_burial_display(),
358 obj.extraordinary_burial_text,
359 obj.inhumation_burial_type,
360 obj.bi_ritual_burial_type,
361 obj.construction,
362 obj.arrangement,
363 obj.get_cover_display(),
364 obj.cover_type,
365 obj.grave_pit_form,
366 obj.grave_pit_orientation,
367 obj.length,
368 obj.width,
369 obj.diameter,
370 obj.height,
371 "; ".join([obj.pref_label for obj in obj.filling_objects.all()]),
372 obj.get_intentionally_deposited_display(),
373 obj.filling,
374 obj.post_holes,
375 obj.surface_identification_mark,
376 obj.erdgraebchen,
377 obj.other_features,
378 "; ".join([str(x) for x in obj.urn_set.all()]),
379 "; ".join([str(x.name) for x in obj.gravegood_set.all()]),
380 obj.amount_related_gravegoods,
381 "; ".join([str(x) for x in obj.deadbodyremains_set.all()]),
382 obj.amount_related_deadbodyremains,
383 "; ".join([str(x) for x in obj.gravegoodother_set.all()]),
384 "; ".join([str(x.species) for x in obj.animalremains_set.all()]),
385 obj.amount_related_organic,
386 ]
387 )
388 return response