X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/40a38822c70cb40ccda6770fe81d74624ecaecd7..3306216e9d0c249c2699275aad212a7c4c3cc4a7:/apps/search/views.py diff --git a/apps/search/views.py b/apps/search/views.py index 9a0b469a1..f7aa77cd9 100644 --- a/apps/search/views.py +++ b/apps/search/views.py @@ -1,17 +1,18 @@ # -*- coding: utf-8 -*- - +# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. +# from django.conf import settings from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.views.decorators import cache -from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect +from django.http import HttpResponse, HttpResponseRedirect, Http404, HttpResponsePermanentRedirect, JsonResponse from django.utils.translation import ugettext as _ from catalogue.utils import split_tags from catalogue.models import Book, Tag, Fragment from pdcounter.models import Author as PDCounterAuthor, BookStub as PDCounterBook -from catalogue.views import JSONResponse -from search import Search, SearchResult +from search.index import Search, SearchResult from suggest.forms import PublishingSuggestForm import re #import enchant @@ -58,10 +59,11 @@ def did_you_mean(query, tokens): # return query +@cache.never_cache def hint(request): prefix = request.GET.get('term', '') if len(prefix) < 2: - return JSONResponse([]) + return JsonResponse([], safe=False) prefix = remove_query_syntax_chars(prefix) @@ -71,9 +73,6 @@ def hint(request): # jezeli tagi dot tylko ksiazki, to wazne zeby te nowe byly w tej samej ksiazce # jesli zas dotycza themes, to wazne, zeby byly w tym samym fragmencie. - tags = search.hint_tags(prefix, pdcounter=True) - books = search.hint_books(prefix) - def is_dupe(tag): if isinstance(tag, PDCounterAuthor): if filter(lambda t: t.slug == tag.slug and t != tag, tags): @@ -83,31 +82,55 @@ def hint(request): return True return False - tags = filter(lambda t: not is_dupe(t), tags) - def category_name(c): if c.startswith('pd_'): c = c[len('pd_'):] return _(c) - callback = request.GET.get('callback', None) - data = [{'label': t.name, - 'category': category_name(t.category), - 'id': t.id, - 'url': t.get_absolute_url()} - for t in tags] + \ - [{'label': b.title, + try: + limit = int(request.GET.get('max', '')) + except ValueError: + limit = -1 + else: + if limit < 1: + limit = -1 + + data = [] + + tags = search.hint_tags(prefix, pdcounter=True) + tags = filter(lambda t: not is_dupe(t), tags) + for t in tags: + if not limit: + break + limit -= 1 + data.append({ + 'label': t.name, + 'category': category_name(t.category), + 'id': t.id, + 'url': t.get_absolute_url() + }) + if limit: + books = search.hint_books(prefix) + for b in books: + if not limit: + break + limit -= 1 + data.append({ + 'label': b.title, 'category': _('book'), 'id': b.id, - 'url': b.get_absolute_url()} - for b in books] + 'url': b.get_absolute_url() + }) + + callback = request.GET.get('callback', None) if callback: return HttpResponse("%s(%s);" % (callback, json.dumps(data)), content_type="application/json; charset=utf-8") else: - return JSONResponse(data) + return JsonResponse(data, safe=False) +@cache.never_cache def main(request): results = {}