62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
"""Present karma data."""
|
|
|
|
import logging
|
|
|
|
from django.shortcuts import get_object_or_404, render, reverse
|
|
from django.views.generic import TemplateView
|
|
from django_datatables_view.base_datatable_view import BaseDatatableView
|
|
from rest_framework import viewsets
|
|
|
|
from karma.models import KarmaKey
|
|
from karma.serializers import KarmaKeySerializer
|
|
|
|
log = logging.getLogger('karma.views')
|
|
|
|
|
|
class IndexView(TemplateView):
|
|
""" Routes to the index template using the generic view """
|
|
template_name = 'karma/index.html'
|
|
|
|
|
|
def key_detail(request, karma_key):
|
|
"""Display the requested karma key."""
|
|
entry = get_object_or_404(KarmaKey, key=karma_key.lower())
|
|
|
|
return render(request, 'karma/karma_key.html', {'entry': entry, 'entry_history': entry.history(mode='date')})
|
|
|
|
|
|
class KarmaKeyViewSet(viewsets.ReadOnlyModelViewSet):
|
|
"""Provide list and detail actions for karma keys."""
|
|
|
|
queryset = KarmaKey.objects.all()
|
|
serializer_class = KarmaKeySerializer
|
|
|
|
|
|
class KarmaKeyListJson(BaseDatatableView):
|
|
""" Provide list of KarmaKeys in snazzy JSON format that DataTables enjoys """
|
|
|
|
model = KarmaKey
|
|
max_display_length = 500
|
|
columns = ['key', 'current_score']
|
|
|
|
# maintain order from columns
|
|
order_columns = ['key', 'current_score']
|
|
|
|
def get_initial_queryset(self):
|
|
""" Add another column that operates like score() """
|
|
return KarmaKey.objects.extra(select={
|
|
'current_score':
|
|
'SELECT SUM(kle.delta) FROM karma_karmalogentry kle WHERE kle.key_id = karma_karmakey.id'
|
|
})
|
|
|
|
def prepare_results(self, qs):
|
|
# prepare list with output column data
|
|
# queryset is already paginated here
|
|
json_data = []
|
|
for kk in qs:
|
|
json_data.append([
|
|
'<a href="{}">{}</a>'.format(reverse('karma_key_detail', args=[kk.key]), kk.key),
|
|
kk.current_score,
|
|
])
|
|
return json_data
|