mirror of
https://github.com/Southampton-RSG/breccia-mapper.git
synced 2026-03-03 03:17:07 +00:00
refactor: Move export into separate app
This commit is contained in:
5
export/views/__init__.py
Normal file
5
export/views/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from .base import ExportListView
|
||||
|
||||
from . import (
|
||||
people
|
||||
)
|
||||
29
export/views/base.py
Normal file
29
export/views/base.py
Normal file
@@ -0,0 +1,29 @@
|
||||
import csv
|
||||
import typing
|
||||
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.http import HttpResponse
|
||||
from django.views.generic import TemplateView
|
||||
from django.views.generic.list import BaseListView
|
||||
|
||||
|
||||
class CsvExportView(LoginRequiredMixin, BaseListView):
|
||||
model = None
|
||||
serializer_class = None
|
||||
|
||||
def render_to_response(self, context: typing.Dict) -> HttpResponse:
|
||||
response = HttpResponse(content_type='text/csv')
|
||||
response['Content-Disposition'] = f'attachment; filename="{self.get_context_object_name(self.object_list)}.csv"'
|
||||
|
||||
# Force ordering by PK - though this should be default anyway
|
||||
serializer = self.serializer_class(self.get_queryset().order_by('pk'), many=True)
|
||||
|
||||
writer = csv.DictWriter(response, fieldnames=serializer.child.column_headers)
|
||||
writer.writeheader()
|
||||
writer.writerows(serializer.data)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
class ExportListView(LoginRequiredMixin, TemplateView):
|
||||
template_name = 'export/export.html'
|
||||
14
export/views/people.py
Normal file
14
export/views/people.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from . import base
|
||||
from .. import serializers
|
||||
|
||||
from people import models
|
||||
|
||||
|
||||
class PersonExportView(base.CsvExportView):
|
||||
model = models.person.Person
|
||||
serializer_class = serializers.people.PersonExportSerializer
|
||||
|
||||
|
||||
class RelationshipExportView(base.CsvExportView):
|
||||
model = models.relationship.Relationship
|
||||
serializer_class = serializers.people.RelationshipSerializer
|
||||
Reference in New Issue
Block a user