# -*- coding: utf-8 -*-
from django.http import Http404, HttpResponseRedirect
from django.shortcuts import resolve_url
from django.views import View
from django.views.generic import CreateView, DetailView, ListView
from swdata import SWPeople
from . import models
[docs]class PeopleReportList(ListView):
model = models.PeopleReport
ordering = '-when_saved'
paginate_by = 10
[docs]class PeopleReportCreate(View):
[docs] @staticmethod
def post(request, *args, **kwargs):
report = models.PeopleReport.create_new_report()
url = resolve_url("star_wars_explorer:PeopleReportDetail", report.pk)
return HttpResponseRedirect(url)
[docs]class PeopleReportDetail(DetailView):
model = models.PeopleReport
[docs] def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
limit = int(self.request.GET.get('limit', 10))
exists = self.object.exists()
if not exists:
context["gone"] = True
return context
data = self.object.data(start=0, stop=limit)
context["header"] = data[0]
context["people"] = data[1:]
context["limit"] = limit + 10
return context
[docs]class PeopleReportDistinct(DetailView):
model = models.PeopleReport
template_name = 'star_wars_explorer/peoplereport_distinct.html'
[docs] def get_object(self, queryset=None):
obj = super().get_object(queryset)
if not obj.exists():
raise Http404("Report file is gone")
return obj
[docs] def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
header = self.object.data(0, 1)[0]
context["header"] = header
columns = self.request.GET.keys() or ['homeworld']
# remove unsupported column names
columns = set(header).intersection(columns)
context["columns"] = columns
context["data"] = self.object.distinct(columns)
return context