summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Bokov <razum2um@mail.ru>2011-11-05 06:45:46 +0700
committerVlad Bokov <razum2um@mail.ru>2011-11-05 06:45:46 +0700
commitf692b0847445359a9edfe10bd897607ee9bd05fc (patch)
tree275c91af7748f4802dda7de85b237581280bedaa
parent114867ecbc9b4120fc40293e9654c7092829c033 (diff)
downloadaskbot-f692b0847445359a9edfe10bd897607ee9bd05fc.tar.gz
askbot-f692b0847445359a9edfe10bd897607ee9bd05fc.tar.bz2
askbot-f692b0847445359a9edfe10bd897607ee9bd05fc.zip
Feature #134: time-based cache for anonymous only & tests
-rw-r--r--askbot/setup_templates/settings.py1
-rw-r--r--askbot/skins/common/templates/question/answer_vote_buttons.html2
-rw-r--r--askbot/tests/db_api_tests.py35
-rw-r--r--askbot/views/readers.py2
4 files changed, 39 insertions, 1 deletions
diff --git a/askbot/setup_templates/settings.py b/askbot/setup_templates/settings.py
index a97402aa..3aead40f 100644
--- a/askbot/setup_templates/settings.py
+++ b/askbot/setup_templates/settings.py
@@ -176,6 +176,7 @@ CACHE_BACKEND = 'locmem://'
#needed for django-keyedcache
CACHE_TIMEOUT = 6000
CACHE_PREFIX = 'askbot' #make this unique
+CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
#If you use memcache you may want to uncomment the following line to enable memcached based sessions
#SESSION_ENGINE = 'django.contrib.sessions.backends.cache_db'
diff --git a/askbot/skins/common/templates/question/answer_vote_buttons.html b/askbot/skins/common/templates/question/answer_vote_buttons.html
index 807f3ab8..1cdd5188 100644
--- a/askbot/skins/common/templates/question/answer_vote_buttons.html
+++ b/askbot/skins/common/templates/question/answer_vote_buttons.html
@@ -17,7 +17,7 @@
{% endif %}
alt="{% trans %}i dont like this answer (click again to cancel){% endtrans %}"
title="{% trans %}i dont like this answer (click again to cancel){% endtrans %}" />
-{% if request.user == question.author or request.user.is_moderator() or request.user.is_superuser() %}
+{% if request.user == question.author or request.user.is_authenticated() and (request.user.is_moderator() or request.user.is_superuser()) %}
<img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
{% if answer.accepted %}
src="{{'/images/vote-accepted-on.png'|media}}"
diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py
index 00091934..e1268d9f 100644
--- a/askbot/tests/db_api_tests.py
+++ b/askbot/tests/db_api_tests.py
@@ -4,6 +4,10 @@ functions that happen on behalf of users
e.g. ``some_user.do_something(...)``
"""
from django.core import exceptions
+from django.core.urlresolvers import reverse
+from django.db import connection
+from django.test.client import Client
+from django.conf import settings
from askbot.tests.utils import AskbotTestCase
from askbot import models
from askbot import const
@@ -39,6 +43,37 @@ class DBApiTests(AskbotTestCase):
self.assertTrue(post.deleted_by == None)
self.assertTrue(post.deleted_at == None)
+ def test_anonymous_question_cache(self):
+ question = self.post_question()
+ settings.DEBUG = True # because it's forsed to False
+ url = reverse('question', kwargs={'id': question.id})
+
+ client = Client()
+ client.get(url, follow=True)
+ counter = len(connection.queries)
+ client.get(url, follow=True)
+
+ self.assertTrue(counter > len(connection.queries))
+ self.assertEqual(3, len(connection.queries)) # session-related only
+ settings.DEBUG = False
+
+ def test_authentificated_no_question_cache(self):
+ question = self.post_question()
+ settings.DEBUG = True # because it's forsed to False
+ url = reverse('question', kwargs={'id': question.id})
+
+ password = '123'
+ client = Client()
+ self.other_user.set_password(password)
+ client.login(username=self.other_user.username, password=password)
+
+ client.get(url, follow=True)
+ counter = len(connection.queries)
+ client.get(url, follow=True)
+
+ self.assertEqual(counter, len(connection.queries))
+ settings.DEBUG = False
+
def test_flag_question(self):
self.user.set_status('m')
self.user.flag_post(self.question)
diff --git a/askbot/views/readers.py b/askbot/views/readers.py
index eabef3c8..8d06c2be 100644
--- a/askbot/views/readers.py
+++ b/askbot/views/readers.py
@@ -23,6 +23,7 @@ from django.views.decorators import csrf
from django.core.urlresolvers import reverse
from django.core import exceptions as django_exceptions
from django.contrib.humanize.templatetags import humanize
+from django.views.decorators.cache import cache_page
import askbot
from askbot import exceptions
@@ -349,6 +350,7 @@ def tags(request):#view showing a listing of available tags - plain list
return render_into_skin('tags.html', data, request)
@csrf.csrf_protect
+@cache_page(60 * 5)
def question(request, id):#refactor - long subroutine. display question body, answers and comments
"""view that displays body of the question and
all answers to it