khaganat-web/logs/views.py

85 lines
2.6 KiB
Python
Raw Normal View History

2018-01-27 17:58:36 +00:00
from django.db.models.functions import TruncDate
from django.db.models import Count
from django.views import generic
from django.conf import settings
2018-01-27 22:12:09 +00:00
from .models import Source, Entry
2018-01-27 17:58:36 +00:00
import datetime
2018-01-27 22:12:09 +00:00
2018-01-27 17:58:36 +00:00
class IndexView(generic.ListView):
template_name = 'logs/index.html'
context_object_name = 'sources'
def get_queryset(self):
now = datetime.date.today()
2018-01-27 22:12:09 +00:00
start_date = now - datetime.timedelta(
days=settings.KHAGANAT_LOGS_MAX_DAYS
)
end_date = now - datetime.timedelta(
days=settings.KHAGANAT_LOGS_MIN_DAYS - 1
)
2018-01-27 17:58:36 +00:00
out = []
2018-01-27 22:12:09 +00:00
qs = Entry.objects.filter(
hidden=False,
source__hidden=False,
created__range=(start_date, end_date)
).values('source', 'source__name', 'source__slug').annotate(
nb=Count('id')
)
for src in qs:
src['stats'] = Entry.objects.filter(
hidden=False,
source=src['source'],
created__range=(start_date, end_date)
).annotate(
date=TruncDate('created')
).values('date').annotate(nb=Count('date')).order_by('-date')
2018-01-27 17:58:36 +00:00
out.append(src)
2018-01-27 22:12:09 +00:00
2018-01-27 17:58:36 +00:00
return out
class EntriesView(generic.ListView):
context_object_name = 'entries'
template_name = 'logs/entries.html'
allow_empty = False
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
2018-01-27 22:12:09 +00:00
context['date'] = datetime.date(
self.kwargs['year'],
self.kwargs['month'],
self.kwargs['day']
)
context['source_channel'] = Source.objects.get(
slug=self.kwargs['source']
)
2018-01-27 17:58:36 +00:00
if isinstance(context['source_channel'], tuple):
context['source_channel'] = context['source_channel'][0]
return context
def get_queryset(self):
2018-01-27 22:12:09 +00:00
dt = datetime.date(
self.kwargs['year'],
self.kwargs['month'],
self.kwargs['day']
)
2018-01-27 17:58:36 +00:00
now = datetime.date.today()
2018-01-27 22:12:09 +00:00
out_of_bounds = any((
(now - dt).days > settings.KHAGANAT_LOGS_MAX_DAYS,
(now - dt).days < settings.KHAGANAT_LOGS_MIN_DAYS,
))
if out_of_bounds:
2018-01-27 17:58:36 +00:00
return Entry.objects.none()
src = Source.objects.get(slug=self.kwargs['source'])
if src is None or src.hidden:
return Entry.objects.none()
2018-01-27 22:12:09 +00:00
return Entry.objects.filter(
hidden=False,
source=src,
created__year=dt.year,
created__month=dt.month,
created__day=dt.day
).order_by('created')