From 51f790289e3e0dc62f07d63c312047e324671d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juha=20Yrj=C3=B6l=C3=A4?= Date: Thu, 18 Feb 2016 11:07:12 +0200 Subject: [PATCH] Include missing changes from previous commit --- events/api.py | 20 ++++++++++++++++++-- events/search_indexes.py | 13 ++++++++++++- multilingual_haystack/backends.py | 15 ++++++++++++--- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/events/api.py b/events/api.py index fd76a0166..fda392b56 100644 --- a/events/api.py +++ b/events/api.py @@ -459,6 +459,7 @@ class KeywordSerializer(LinkedEventsSerializer): class Meta: model = Keyword + class KeywordViewSet(viewsets.ReadOnlyModelViewSet): queryset = Keyword.objects.all() serializer_class = KeywordSerializer @@ -496,6 +497,7 @@ def get_queryset(self): register_view(KeywordViewSet, 'keyword') + class KeywordSetSerializer(LinkedEventsSerializer): view_name = 'keywordset-detail' keywords = JSONLDRelatedField( @@ -506,6 +508,7 @@ class KeywordSetSerializer(LinkedEventsSerializer): class Meta: model = KeywordSet + class JSONAPIViewSet(viewsets.ReadOnlyModelViewSet): def initial(self, request, *args, **kwargs): ret = super(JSONAPIViewSet, self).initial(request, *args, **kwargs) @@ -1177,7 +1180,7 @@ def to_representation(self, search_result): assert model in serializers_by_model, "Serializer for %s not found" % model ser_class = serializers_by_model[model] data = ser_class(search_result.object, context=self.context).data - data['object_type'] = model._meta.model_name + data['resource_type'] = model._meta.model_name data['score'] = search_result.score return data @@ -1213,10 +1216,23 @@ def list(self, request, *args, **kwargs): 'gauss': { 'end_time': { 'origin': now, - 'scale': DATE_DECAY_SCALE }}}) + 'scale': DATE_DECAY_SCALE + } + } + }) else: queryset = queryset.filter(text=AutoQuery(q_val)) + types = request.query_params.get('resource_type', '').split(',') + if types: + models = set() + for t in types: + if t == 'event': + models.add(Event) + elif t == 'place': + models.add(Place) + queryset = queryset.models(*list(models)) + self.object_list = queryset.load_all() page = self.paginate_queryset(self.object_list) diff --git a/events/search_indexes.py b/events/search_indexes.py index 11749fa69..0c6fbb4c2 100644 --- a/events/search_indexes.py +++ b/events/search_indexes.py @@ -1,5 +1,5 @@ from haystack import indexes -from .models import Event, PublicationStatus +from .models import Event, Place, PublicationStatus from django.utils.translation import get_language from django.utils.html import strip_tags @@ -22,3 +22,14 @@ def prepare(self, obj): def index_queryset(self, using=None): return self.get_model().objects.filter(publication_status=PublicationStatus.PUBLIC) + + +class PlaceIndex(indexes.SearchIndex, indexes.Indexable): + text = indexes.CharField(document=True, use_template=True) + autosuggest = indexes.EdgeNgramField(model_attr='name') + + def get_updated_field(self): + return 'last_modified_time' + + def get_model(self): + return Place diff --git a/multilingual_haystack/backends.py b/multilingual_haystack/backends.py index 84fe8b312..15fe046d4 100644 --- a/multilingual_haystack/backends.py +++ b/multilingual_haystack/backends.py @@ -32,26 +32,35 @@ def update(self, index, iterable, commit=True): def clear(self, **kwargs): return -#class MultilingualSearchQuery(BaseSearchQuery): + +# class MultilingualSearchQuery(BaseSearchQuery): # def __init__(self, using=DEFAULT_ALIAS): + class MultilingualSearchEngine(BaseEngine): backend = MultilingualSearchBackend - #query = MultilingualSearchQuery + # query = MultilingualSearchQuery def get_query(self): - language = translation.get_language()[:2] + language = translation.get_language() + if not language: + language = settings.LANGUAGES[0][0][:2] + else: + language = language[:2] using = '%s-%s' % (self.using, language) return connections[using].get_query() + class LanguageSearchBackend(BaseSearchBackend): def update(self, *args, **kwargs): # Handle all updates through the main Multilingual object. return + class LanguageSearchQuery(BaseSearchQuery): pass + class LanguageSearchEngine(BaseEngine): def __init__(self, **kwargs): conn_config = settings.HAYSTACK_CONNECTIONS[kwargs['using']]