Coverage for browsing/views.py: 48%

196 statements  

« 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 

6 

7from .forms import GenericFilterFormHelper, MainListFilterFormHelper 

8 

9 

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) 

44 

45from vocabs.models import SkosConcept 

46 

47 

48class GenericListView(SingleTableView): 

49 filter_class = None 

50 formhelper_class = None 

51 context_filter_name = "filter" 

52 paginate_by = 25 

53 

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 

59 

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 

66 

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 

71 

72 

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 

79 

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) 

87 

88 alternative_names = [] 

89 for x in BurialSite.objects.all(): 

90 alternative_names.append(x.alternative_name) 

91 context["alternative_names"] = set(alternative_names) 

92 

93 return context 

94 

95 

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 

102 

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) 

110 

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) 

115 

116 return context 

117 

118 

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 

125 

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 

134 

135 

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 

142 

143 def get_context_data(self, **kwargs): 

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

145 context[self.context_filter_name] = self.filter 

146 

147 return context 

148 

149 

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 

156 

157 def get_context_data(self, **kwargs): 

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

159 context[self.context_filter_name] = self.filter 

160 

161 burialsite_names = [] 

162 for x in BurialSite.objects.all(): 

163 burialsite_names.append(x.name) 

164 context["burialsite_names"] = set(burialsite_names) 

165 

166 return context 

167 

168 

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 

175 

176 def get_context_data(self, **kwargs): 

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

178 context[self.context_filter_name] = self.filter 

179 

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) 

184 

185 burialsite_names = [] 

186 for x in BurialSite.objects.all(): 

187 burialsite_names.append(x.name) 

188 context["burialsite_names"] = set(burialsite_names) 

189 

190 return context 

191 

192 

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 

199 

200 def get_context_data(self, **kwargs): 

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

202 context[self.context_filter_name] = self.filter 

203 

204 burialsite_names = [] 

205 for x in BurialSite.objects.all(): 

206 burialsite_names.append(x.name) 

207 context["burialsite_names"] = set(burialsite_names) 

208 

209 return context 

210 

211 

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 

218 

219 def get_context_data(self, **kwargs): 

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

221 context[self.context_filter_name] = self.filter 

222 

223 burialsite_names = [] 

224 for x in BurialSite.objects.all(): 

225 burialsite_names.append(x.name) 

226 context["burialsite_names"] = set(burialsite_names) 

227 

228 return context 

229 

230 

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 

237 

238 def get_context_data(self, **kwargs): 

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

240 context[self.context_filter_name] = self.filter 

241 

242 burialsite_names = [] 

243 for x in BurialSite.objects.all(): 

244 burialsite_names.append(x.name) 

245 context["burialsite_names"] = set(burialsite_names) 

246 

247 return context 

248 

249 

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 

256 

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) 

264 

265 burials = [] 

266 for x in self.get_queryset(): 

267 burials.append(x) 

268 context["burials"] = set(burials) 

269 return context 

270 

271 

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 

278 

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