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, JVM, SearchResult
from lucene import StringReader
from suggest.forms import PublishingSuggestForm
+from time import sleep
import re
-import enchant
+#import enchant
+import json
-dictionary = enchant.Dict('pl_PL')
+#dictionary = enchant.Dict('en_US')
def match_word_re(word):
if len(authors) > 0:
continue
- if not dictionary.check(t):
- try:
- change_to = dictionary.suggest(t)[0].lower()
- if change_to != t.lower():
- change[t] = change_to
- except IndexError:
- pass
+ if False:
+ if not dictionary.check(t):
+ try:
+ change_to = dictionary.suggest(t)[0].lower()
+ if change_to != t.lower():
+ change[t] = change_to
+ except IndexError:
+ pass
if change == {}:
return None
return query
+
JVM.attachCurrentThread()
-search = Search()
+_search = None
+
+
+def get_search():
+ global _search
+
+ while _search is False:
+ sleep(1)
+
+ if _search is None:
+ _search = False
+ _search = Search()
+ return _search
def hint(request):
return JSONResponse([])
JVM.attachCurrentThread()
+ search = get_search()
hint = search.hint()
try:
tags = request.GET.get('tags', '')
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):
+ return True
+ elif isinstance(tag, PDCounterBook):
+ if filter(lambda b: b.slug == tag.slug, tags):
+ 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)
- return JSONResponse(
- [{'label': t.name,
- 'category': category_name(t.category),
- 'id': t.id,
- 'url': t.get_absolute_url()}
- for t in tags] + \
- [{'label': b.title,
- 'category': _('book'),
- 'id': b.id,
- 'url': b.get_absolute_url()}
- for b in books])
+ 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,
+ 'category': _('book'),
+ 'id': b.id,
+ 'url': b.get_absolute_url()}
+ for b in books]
+ if callback:
+ return HttpResponse("%s(%s);" % (callback, json.dumps(data)),
+ content_type="application/json; charset=utf-8")
+ else:
+ return JSONResponse(data)
+
def main(request):
return render_to_response('catalogue/search_too_short.html', {'prefix': query},
context_instance=RequestContext(request))
+ search = get_search()
# hint.tags(tag_list)
# if book:
# hint.books(book)