Update web/core/views.py

This commit is contained in:
Joshua Laymon 2025-08-22 00:44:18 +00:00
parent 3c282d86ec
commit 3a931926cf

View File

@ -427,59 +427,59 @@ def export_csv(request):
return response return response
@login_required #@login_required
def stats_page(request): #def stats_page(request):
total = Entry.objects.count() # total = Entry.objects.count()
today = date.today() # today = date.today()
last30 = Entry.objects.filter(date_added__gte=today - timedelta(days=30)).count() # last30 = Entry.objects.filter(date_added__gte=today - timedelta(days=30)).count()
last365 = Entry.objects.filter(date_added__gte=today - timedelta(days=365)).count() # last365 = Entry.objects.filter(date_added__gte=today - timedelta(days=365)).count()
#
from collections import Counter # from collections import Counter
#
months = [] # months = []
y = today.year # y = today.year
m = today.month # m = today.month
for i in range(12): # for i in range(12):
mm = m - i # mm = m - i
yy = y # yy = y
while mm <= 0: # while mm <= 0:
mm += 12 # mm += 12
yy -= 1 # yy -= 1
from datetime import date as _d # from datetime import date as _d
start = _d(yy, mm, 1) # start = _d(yy, mm, 1)
end = _d(yy + 1, 1, 1) if mm == 12 else _d(yy, mm + 1, 1) # end = _d(yy + 1, 1, 1) if mm == 12 else _d(yy, mm + 1, 1)
label = f"{yy}-{mm:02d}" # label = f"{yy}-{mm:02d}"
months.append((label, start, end)) # months.append((label, start, end))
months = list(reversed(months)) # months = list(reversed(months))
#
series = [ # series = [
(label, Entry.objects.filter(date_added__gte=start, date_added__lt=end).count()) # (label, Entry.objects.filter(date_added__gte=start, date_added__lt=end).count())
for label, start, end in months # for label, start, end in months
] # ]
peak = max((v for _, v in series), default=1) # peak = max((v for _, v in series), default=1)
heights = [ # heights = [
(label, value, 8 + int((value / peak) * 100) if peak else 8) # (label, value, 8 + int((value / peak) * 100) if peak else 8)
for label, value in series # for label, value in series
] # ]
#
counts = Counter() # counts = Counter()
for subj in Entry.objects.exclude(subject="").values_list("subject", flat=True): # for subj in Entry.objects.exclude(subject="").values_list("subject", flat=True):
for tag in [t.strip() for t in subj.split(",") if t.strip()]: # for tag in [t.strip() for t in subj.split(",") if t.strip()]:
counts[tag.lower()] += 1 # counts[tag.lower()] += 1
top_subjects = [{"name": n.title(), "count": c} for n, c in counts.most_common(20)] # top_subjects = [{"name": n.title(), "count": c} for n, c in counts.most_common(20)]
#
return render( # return render(
request, # request,
"stats.html", # "stats.html",
{ # {
"total": total, # "total": total,
"last30": last30, # "last30": last30,
"last365": last365, # "last365": last365,
"series": series, # "series": series,
"heights": heights, # "heights": heights,
"top_subjects": top_subjects, # "top_subjects": top_subjects,
}, # },
) # )
# ========= Scripture Normalizer ========= # ========= Scripture Normalizer =========