# HG changeset patch # User verrierj # Date 1329144446 -3600 # Node ID 9beab46d99d3ab7a9676f2cf7fb8759e4d634ce9 # Parent 28988fcccad1ea856d85a299c4ca071e10b0ed2d Remove cache from search results diff -r 28988fcccad1 -r 9beab46d99d3 src/ldt/ldt/ldt_utils/templates/front/front_search_results.html --- a/src/ldt/ldt/ldt_utils/templates/front/front_search_results.html Mon Feb 13 12:12:04 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/front/front_search_results.html Mon Feb 13 15:47:26 2012 +0100 @@ -123,7 +123,7 @@
  • {% if results.has_previous %} - {% trans "previous" %} + {% trans "previous" %} . {% endif %} {% if results.paginator.num_pages > 1 %} @@ -133,7 +133,7 @@ {% if i|add:'1' == results.number %} {{i|add:'1'}} {% else %} - {{i|add:'1'}} + {{i|add:'1'}} {% endif %} {% if i|add:'1' < results.paginator.num_pages and 1 < results.paginator.num_pages %} {% endif %} @@ -143,7 +143,7 @@ {% endif %} {% if results.has_next %} - {% trans "next" %} + {% trans "next" %} {% endif %}

  • diff -r 28988fcccad1 -r 9beab46d99d3 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html Mon Feb 13 12:12:04 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html Mon Feb 13 15:47:26 2012 +0100 @@ -97,7 +97,7 @@ diff -r 28988fcccad1 -r 9beab46d99d3 src/ldt/ldt/ldt_utils/urls.py --- a/src/ldt/ldt/ldt_utils/urls.py Mon Feb 13 12:12:04 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/urls.py Mon Feb 13 15:47:26 2012 +0100 @@ -12,7 +12,6 @@ url(r'^groups/$', 'views.workspace.groups'), url(r'^get_group_projects/$', 'views.group.get_group_projects'), url(r'^search/$', 'views.workspace.search_index'), - url(r'^searchListing', 'views.workspace.search_listing'), url(r'^search/(?P.*)/(?P.*)$', 'views.lignesdetemps.search_index_get'), url(r'^searchLdt/(?P.*)/(?P.*)$', 'views.lignesdetemps.search_ldt'), url(r'^searchSeg/(?P.*)/(?P.*)$', 'views.lignesdetemps.search_segments'), @@ -46,7 +45,6 @@ url(r'^front/player/(?P.*)/$', 'views.front.annot_content'), url(r'^front/player/(?P.*)/(?P.*)/(?P.*)$', 'views.front.annot_content'), url(r'^front/search/$', 'views.front.search_index'), - url(r'^front/searchListing', 'views.front.search_listing'), url(r'^front/medias', 'views.front.all_contents'), ) diff -r 28988fcccad1 -r 9beab46d99d3 src/ldt/ldt/ldt_utils/views/front.py --- a/src/ldt/ldt/ldt_utils/views/front.py Mon Feb 13 12:12:04 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/views/front.py Mon Feb 13 15:47:26 2012 +0100 @@ -1,13 +1,16 @@ from django.conf import settings -from django.contrib.auth.decorators import login_required from django.contrib.auth.models import Group, User +from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.shortcuts import render_to_response from django.template import RequestContext from guardian.shortcuts import get_objects_for_group from ldt.ldt_utils.models import Content, Project -from ldt.ldt_utils.views.workspace import search_index as ws_search_index, search_listing as ws_search_listing +from ldt.ldt_utils.forms import SearchForm +from ldt.ldt_utils.views.workspace import get_search_results from tagging.models import Tag, TaggedItem +import base64 + def front_home(request): @@ -119,11 +122,29 @@ def search_index(request): - return ws_search_index(request, front_template=True) - + language_code = request.LANGUAGE_CODE[:2] + + page = int(request.GET.get('page', '-1')) + search = request.GET.get('search', '') + field = request.GET.get('field', 'all') + + if page >= 0 and search != '': + results, nb = get_search_results(request, search, field, page) + + return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) + + sform = SearchForm(request.POST) + if sform.is_valid(): + search = sform.cleaned_data["search"] + queryStr = base64.urlsafe_b64encode(search.encode('utf8')) + field = request.POST["field"] + + results, nb = get_search_results(request, search, field, 1) + + return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) + return HttpResponseRedirect('ldt.ldt_utils.views.front.home') + -def search_listing(request): - return ws_search_listing(request, front_template=True) def get_content_tags(limit=None, steps=10): diff -r 28988fcccad1 -r 9beab46d99d3 src/ldt/ldt/ldt_utils/views/workspace.py --- a/src/ldt/ldt/ldt_utils/views/workspace.py Mon Feb 13 12:12:04 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/views/workspace.py Mon Feb 13 15:47:26 2012 +0100 @@ -1,7 +1,6 @@ from django.conf import settings from django.contrib.auth.decorators import login_required from django.contrib.auth.models import Group -from django.core.cache import cache from django.core.urlresolvers import reverse#, resolve from django.core.paginator import Paginator, InvalidPage, EmptyPage from django.http import (HttpResponseRedirect, HttpResponseForbidden ) @@ -150,130 +149,96 @@ form = SearchForm() return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request)) - -def search_index(request, front_template=False): +@login_required +def search_index(request): + language_code = request.LANGUAGE_CODE[:2] + + page = int(request.GET.get('page', '-1')) + search = request.GET.get('search', '') + field = request.GET.get('field', 'all') + + if page >= 0 and search != '': + results, nb = get_search_results(request, search, field, page) + + return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) + sform = SearchForm(request.POST) if sform.is_valid(): search = sform.cleaned_data["search"] queryStr = base64.urlsafe_b64encode(search.encode('utf8')) field = request.POST["field"] - language_code = request.LANGUAGE_CODE[:2] if request.POST.has_key("ldt_pres"): url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.lignesdetemps.search_init", args=[field, queryStr]) return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request)) - else: - results = get_results_with_context(field, search) - - # Search results come from published project - # We do not apply permissions here since it has to be reached from unlogged users. - all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results]) - all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2) - all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results]) - viewable_projects_id = [p.ldt_id for p in all_projects] - - complete_results = [] - results.sort(key=lambda k: k['iri_id']) + else: + results, nb = get_search_results(request, search, field, 1) - for iri_id, item in groupby(results, itemgetter('iri_id')): - content = filter(lambda e: e.iri_id == iri_id, all_contents)[0] - if content.description is None: - content.description = '' - - all_related_segments = list(item) - - valid_segments = [] - for s in all_related_segments: - segment = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['decoupage_id'] and seg.ensemble_id == s['ensemble_id'] ][0] - - segment.score = s['score'] - segment.lucene_id = s['lucene_id'] - segment.context = s['context'] - segment.context_tags = s['tags'] - - if not s['project_id']: - segment.project_id = '_' - valid_segments.append(segment) - elif s['project_id'] in viewable_projects_id: - valid_segments.append(segment) - - # If all segments found belong to unpublished projects or projects - # the current user is not allowed to see - if not valid_segments: - continue - - score = sum([seg.score for seg in valid_segments]) - complete_results.append({ - 'list': valid_segments, - 'score': score, - 'content': content, - }) - - - complete_results.sort(key=lambda k: k['score']) - - 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 - - try: - results = paginator.page(page) - except (EmptyPage, InvalidPage): - results = paginator.page(paginator.num_pages) - - results.object_list = highlight_documents(results.object_list, search, field) - - if front_template : - return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) - else : - return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) + return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : nb, 'search' : search, 'field': field, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) else: - if front_template : - return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home')) - else : - return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project')) - + return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project')) -def search_listing(request, front_template=False): - if not cache.get('complete_results_%s' % request.user.username): - if front_template : - return HttpResponseRedirect(reverse('ldt.ldt_utils.views.front.front_home')) - else : - return HttpResponseRedirect(reverse('ldt.ldt_utils.views.workspace.published_project')) - - 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] - - try: - page = int(request.GET.get('page', '1')) - except ValueError: - page = 1 - + +def get_search_results(request, search, field, page): + results = get_results_with_context(field, search) + + all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results]) + all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2) + all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results]) + viewable_projects_id = [p.ldt_id for p in all_projects] + + complete_results = [] + results.sort(key=lambda k: k['iri_id']) + + for iri_id, item in groupby(results, itemgetter('iri_id')): + content = filter(lambda e: e.iri_id == iri_id, all_contents)[0] + if content.description is None: + content.description = '' + + all_related_segments = list(item) + + valid_segments = [] + for s in all_related_segments: + segment = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['decoupage_id'] and seg.ensemble_id == s['ensemble_id'] ][0] + + segment.score = s['score'] + segment.lucene_id = s['lucene_id'] + segment.context = s['context'] + segment.context_tags = s['tags'] + + if not s['project_id']: + segment.project_id = '_' + valid_segments.append(segment) + elif s['project_id'] in viewable_projects_id: + valid_segments.append(segment) + + # If all segments found belong to unpublished projects or projects + # the current user is not allowed to see + if not valid_segments: + continue + + score = sum([seg.score for seg in valid_segments]) + complete_results.append({ + 'list': valid_segments, + 'score': score, + 'content': content, + }) + + complete_results.sort(key=lambda k: k['score']) + + paginator = Paginator (complete_results, settings.LDT_RESULTS_PER_PAGE) + try: results = paginator.page(page) except (EmptyPage, InvalidPage): results = paginator.page(paginator.num_pages) - + results.object_list = highlight_documents(results.object_list, search, field) - - if front_template : - return render_to_response('front/front_search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) - else : - return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'nb_results' : paginator.count, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) - - - - - + return results, len(complete_results) + def loading(request): return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))