--- a/src/ldt/ldt/ldt_utils/forms.py Mon Dec 12 14:48:57 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/forms.py Mon Dec 12 15:57:35 2011 +0100
@@ -29,7 +29,7 @@
contents = forms.ModelMultipleChoiceField(Content.objects.all())
index_projects = forms.BooleanField(required=False, initial=False)
-class SearchForm(forms.ModelForm):
+class SearchForm(forms.Form):
search = forms.CharField(label=_("Search"))
field = forms.ChoiceField([(u"all", _("all")), (u"title", _("title")), (u"abstract", _("resume")), (u"tags", _("tags"))], label=_("Fields"))
ldt_pres = forms.BooleanField(required=False, initial=True, label=_("Display the results in Lignes De Temps"))
--- a/src/ldt/ldt/ldt_utils/views.py Mon Dec 12 14:48:57 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py Mon Dec 12 15:57:35 2011 +0100
@@ -1,6 +1,7 @@
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User, Group
+from django.core.cache import cache
from django.core.urlresolvers import reverse
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.db.models import Q
@@ -18,12 +19,12 @@
from django.utils.translation import ugettext as _, ungettext
from forms import (LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm,
ContentForm, MediaForm, GroupAddForm)
-from guardian.core import ObjectPermissionChecker
-from guardian.shortcuts import assign, remove_perm, get_objects_for_group
+from guardian.shortcuts import remove_perm, get_objects_for_group
from ldt.ldt_utils.models import Content
from ldt.ldt_utils.utils import boolean_convert, LdtUtils, LdtSearch
from ldt.security.utils import (assign_perm_to_obj, set_forbidden_stream,
add_change_attr, get_userlist_model, get_userlist_group)
+from ldt.security.cache import get_checker_for, assign
from lxml.html import fragment_fromstring
from models import Media, Project
from projectserializer import ProjectSerializer
@@ -66,7 +67,7 @@
# get list of all published projects
group_list = request.user.groups.exclude(name=settings.PUBLIC_GROUP_NAME)
- checker = ObjectPermissionChecker(request.user)
+ checker = get_checker_for(request.user)
group_list = sorted(group_list.all(), key=lambda group: group.name.lower())
@@ -231,7 +232,7 @@
group_list = group_list.exclude(name=settings.PUBLIC_GROUP_NAME)
group_list = sorted(group_list.all(), key=lambda group: group.name.lower())
- checker = ObjectPermissionChecker(request.user)
+ checker = get_checker_for(request.user)
for g in group_list:
if checker.has_perm('change_group', g):
g.change = True
@@ -292,9 +293,9 @@
complete_results.sort(key=lambda k: k['score'])
- request.session['complete_results'] = complete_results
- request.session['search'] = search
- request.session['field'] = field
+ cache.set('complete_results_%s' % request.user.username, complete_results)
+ cache.set('search_%s' % request.user.username, search)
+ cache.set('field_%s' % request.user.username, field)
paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE)
page = 1
@@ -313,12 +314,12 @@
def search_listing(request):
- if not request.session.has_key('complete_results'):
+ if not cache.get('complete_results_%s' % request.user.username):
return HttpResponseRedirect(reverse('ldt.ldt_utils.views.published_project'))
- complete_results = request.session.get('complete_results')
- search = request.session.get('search')
- field = request.session.get('field')
+ complete_results = cache.get('complete_results_%s' % request.user.username)
+ search = cache.get('search_%s' % request.user.username)
+ field = cache.get('field_%s' % request.user.username)
paginator = Paginator(complete_results, settings.LDT_RESULTS_PER_PAGE)
language_code = request.LANGUAGE_CODE[:2]
@@ -1323,7 +1324,7 @@
@login_required
def update_group(request, group_id):
group = get_object_or_404(Group, id=group_id)
- checker = ObjectPermissionChecker(request.user)
+ checker = get_checker_for(request.user)
if not checker.has_perm('change_group', group):
form_status = 'none'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/security/cache.py Mon Dec 12 15:57:35 2011 +0100
@@ -0,0 +1,25 @@
+from django.core.cache import cache
+from guardian.core import ObjectPermissionChecker
+from guardian.shortcuts import assign
+
+def get_checker_for(user):
+ key_name = 'checker_%s' % user.username
+
+ checker = cache.get(key_name)
+ if checker:
+ return checker
+
+ checker = ObjectPermissionChecker(user)
+ cache.set(key_name, checker, 30)
+ return checker
+
+
+def assign(perm, user_or_group, object):
+ assign(perm, user_or_group, object)
+
+ if hasattr('username', user_or_group):
+ key = 'checker_%s' % user_or_group.username
+ else:
+ key = 'checker_%s' % user_or_group.name
+
+ cache.delete('checker_%s' % key)
\ No newline at end of file
--- a/src/ldt/ldt/security/utils.py Mon Dec 12 14:48:57 2011 +0100
+++ b/src/ldt/ldt/security/utils.py Mon Dec 12 15:57:35 2011 +0100
@@ -1,8 +1,7 @@
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
-from guardian.core import ObjectPermissionChecker
from guardian.shortcuts import assign, remove_perm, get_users_with_perms, get_groups_with_perms
-
+from cache import get_checker_for
try:
from threading import local
@@ -104,7 +103,7 @@
cls = ctype.model_class()
if model_name in [cls_name.lower() for cls_name in settings.USE_GROUP_PERMISSIONS]:
- checker = ObjectPermissionChecker(user)
+ checker = get_checker_for(user)
else:
checker = None
--- a/web/ldtplatform/config.py.tmpl Mon Dec 12 14:48:57 2011 +0100
+++ b/web/ldtplatform/config.py.tmpl Mon Dec 12 15:57:35 2011 +0100
@@ -49,6 +49,13 @@
}
}
+CACHES = {
+ 'default': {
+ 'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
+ 'LOCATION': 'cache',
+ }
+}
+
DEBUG = True
TEMPLATE_DEBUG = DEBUG