diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-11-15 16:03:52 +0100 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-11-20 19:15:41 +0100 |
commit | 64e477ba7b4845f768ba60e5a9f8fb580a3dd44e (patch) | |
tree | 9f1943efc84b634e09f24e1d79c0f84ccde89b69 | |
parent | 5c0e4e11dad001952f7fe745b22e1cf63fbc50fd (diff) | |
download | hyperkitty-64e477ba7b4845f768ba60e5a9f8fb580a3dd44e.tar.gz hyperkitty-64e477ba7b4845f768ba60e5a9f8fb580a3dd44e.tar.xz hyperkitty-64e477ba7b4845f768ba60e5a9f8fb580a3dd44e.zip |
Cache the votes for threads
-rw-r--r-- | hyperkitty/lib/voting.py | 14 | ||||
-rw-r--r-- | hyperkitty/views/message.py | 5 |
2 files changed, 16 insertions, 3 deletions
diff --git a/hyperkitty/lib/voting.py b/hyperkitty/lib/voting.py index d21d977..56fee7e 100644 --- a/hyperkitty/lib/voting.py +++ b/hyperkitty/lib/voting.py @@ -20,6 +20,7 @@ # +from django.core.cache import cache from hyperkitty.models import Rating @@ -59,9 +60,16 @@ def set_message_votes(message, user=None): def set_thread_votes(thread, user=None): - total = 0 - # XXX: 1 SQL request per thread, possible optimization here - likes, dislikes, myvote = get_votes(thread.email_id_hashes) + total = myvote = 0 + likes = dislikes = None + cache_key = "list:%s:thread:%s:votes" % (thread.list_name, thread.thread_id) + if user is None or not user.is_authenticated(): + likes, dislikes = cache.get(cache_key, (None, None)) + myvote = 0 + if likes is None or dislikes is None: + # XXX: 1 SQL request per thread, possible optimization here + likes, dislikes, myvote = get_votes(thread.email_id_hashes) + cache.set(cache_key, (likes, dislikes)) total = likes + dislikes try: thread.likes = likes / total diff --git a/hyperkitty/views/message.py b/hyperkitty/views/message.py index 414df68..2ed53e4 100644 --- a/hyperkitty/views/message.py +++ b/hyperkitty/views/message.py @@ -28,6 +28,7 @@ from django.http import HttpResponse, Http404 from django.shortcuts import redirect, render from django.core.urlresolvers import reverse from django.core.exceptions import SuspiciousOperation +from django.core.cache import cache from django.template import RequestContext, loader from django.contrib.auth.decorators import login_required @@ -131,6 +132,10 @@ def vote(request, mlist_fqdn, message_id_hash): v.vote = value v.save() + # Invalidate the cache for the thread votes + cache.delete("list:%s:thread:%s:votes" + % (mlist_fqdn, message.thread.thread_id)) + # Extract all the votes for this message to refresh it set_message_votes(message, request.user) t = loader.get_template('messages/like_form.html') |