show karma graph with date-based X range
this is way more interesting of a graph than delta-based, which just ends up being a linear slope. dunno what i was thinking yesterday
This commit is contained in:
parent
dab41fa7d3
commit
e5263d0019
|
@ -1,5 +1,6 @@
|
|||
"""Karma logging models."""
|
||||
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
import pytz
|
||||
|
||||
|
@ -7,11 +8,19 @@ from irc.client import NickMask
|
|||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
from django.utils import timezone
|
||||
|
||||
log = logging.getLogger('karma.models')
|
||||
|
||||
|
||||
def perdelta(start, end, delta):
|
||||
curr = start
|
||||
while curr < end:
|
||||
yield curr
|
||||
curr += delta
|
||||
yield end
|
||||
|
||||
|
||||
class KarmaKeyManager(models.Manager):
|
||||
|
||||
"""Manage handy queries for KarmaKey."""
|
||||
|
@ -52,18 +61,37 @@ class KarmaKey(models.Model):
|
|||
return rank+1
|
||||
return None
|
||||
|
||||
def history(self):
|
||||
def history(self, mode='delta'):
|
||||
"""Determine the score for this karma entry at every delta."""
|
||||
|
||||
history = []
|
||||
|
||||
entries = KarmaLogEntry.objects.filter(key=self).order_by('created')
|
||||
for entry in entries:
|
||||
timestamp = entry.created
|
||||
delta = entry.delta
|
||||
score = KarmaLogEntry.objects.filter(key=self).filter(created__lte=entry.created).aggregate(models.Sum('delta'))['delta__sum']
|
||||
if mode == 'delta':
|
||||
entries = KarmaLogEntry.objects.filter(key=self).order_by('created')
|
||||
for entry in entries:
|
||||
timestamp = entry.created
|
||||
delta = entry.delta
|
||||
score = KarmaLogEntry.objects.filter(key=self).filter(created__lte=entry.created).aggregate(
|
||||
models.Sum('delta'))['delta__sum']
|
||||
|
||||
history.append((timestamp, delta, score))
|
||||
history.append((timestamp, delta, score))
|
||||
elif mode == 'date':
|
||||
first_entry = KarmaLogEntry.objects.filter(key=self).order_by('created')[0]
|
||||
slice_begin = first_entry.created.date()
|
||||
slice_end = timezone.now().date()
|
||||
for timeslice in perdelta(slice_begin, slice_end, timedelta(days=1)):
|
||||
score = KarmaLogEntry.objects.filter(key=self).filter(
|
||||
created__lte=timeslice+timedelta(days=1)).aggregate(models.Sum('delta'))['delta__sum']
|
||||
if not score:
|
||||
score = 0
|
||||
try:
|
||||
prev_score = history[-1][2]
|
||||
except IndexError:
|
||||
prev_score = 0
|
||||
|
||||
delta = score - prev_score
|
||||
|
||||
history.append((timeslice, delta, score))
|
||||
|
||||
return history
|
||||
|
||||
|
|
|
@ -14,4 +14,4 @@ def key_detail(request, karma_key):
|
|||
|
||||
entry = get_object_or_404(KarmaKey, key=karma_key)
|
||||
|
||||
return render(request, 'karma/karma_key.html', {'entry': entry, 'entry_history': entry.history()})
|
||||
return render(request, 'karma/karma_key.html', {'entry': entry, 'entry_history': entry.history(mode='date')})
|
||||
|
|
Loading…
Reference in New Issue