From 6826cbb56f1f302067610356078e20c6b54733fa Mon Sep 17 00:00:00 2001 From: Luan Date: Tue, 8 Oct 2013 12:42:18 -0300 Subject: [PATCH] Adding search app and type field to search_indexes --- src/accounts/search_indexes.py | 5 +++++ src/colab/custom_settings.py | 1 + src/colab/urls.py | 6 ++++-- src/search/__init__.py | 0 src/search/admin.py | 3 +++ src/search/forms.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/search/models.py | 3 +++ src/search/tests.py | 3 +++ src/search/views.py | 3 +++ src/super_archives/search_indexes.py | 5 +++++ 10 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/search/__init__.py create mode 100644 src/search/admin.py create mode 100644 src/search/forms.py create mode 100644 src/search/models.py create mode 100644 src/search/tests.py create mode 100644 src/search/views.py diff --git a/src/accounts/search_indexes.py b/src/accounts/search_indexes.py index b76eb59..407a546 100644 --- a/src/accounts/search_indexes.py +++ b/src/accounts/search_indexes.py @@ -17,8 +17,13 @@ class UserIndex(indexes.SearchIndex, indexes.Indexable): google_talk = indexes.CharField(model_attr='google_talk', null=True) webpage = indexes.CharField(model_attr='webpage', null=True) + type = indexes.CharField() + def get_model(self): return User + def prepare_type(self, obj): + return u'user' + def index_queryset(self, using=None): return self.get_model().objects.filter(is_active=True) diff --git a/src/colab/custom_settings.py b/src/colab/custom_settings.py index db0d34a..2e1b209 100644 --- a/src/colab/custom_settings.py +++ b/src/colab/custom_settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = INSTALLED_APPS + ( 'planet', 'accounts', 'proxy', + 'search', # Feedzilla and deps 'feedzilla', diff --git a/src/colab/urls.py b/src/colab/urls.py index c1fdcdb..d249c47 100644 --- a/src/colab/urls.py +++ b/src/colab/urls.py @@ -8,6 +8,7 @@ from haystack.query import SearchQuerySet from haystack.views import SearchView from accounts.models import User +from search.forms import ColabSearchForm from super_archives.models import Message @@ -16,11 +17,12 @@ admin.autodiscover() urlpatterns = patterns('', url(r'^$', 'colab.deprecated.views.other.home', name='home'), + # TODO change search to full_search with haystack url(r'^search/$', 'colab.deprecated.views.other.search', name='search'), url(r'^full_search/', SearchView( template='search/search.html', - searchqueryset=SearchQuerySet().models(User, Message), - form_class=ModelSearchForm, + searchqueryset=SearchQuerySet(), + form_class=ColabSearchForm, ), name='haystack_search'), url(r'open-data/$', TemplateView.as_view(template_name='open-data.html'), diff --git a/src/search/__init__.py b/src/search/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/search/__init__.py diff --git a/src/search/admin.py b/src/search/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/src/search/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/src/search/forms.py b/src/search/forms.py new file mode 100644 index 0000000..ce166c0 --- /dev/null +++ b/src/search/forms.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- + +from django import forms +from django.utils.translation import ugettext_lazy as _ +from haystack.forms import SearchForm + +from accounts.models import User +from super_archives.models import Message + + +class ColabSearchForm(SearchForm): + q = forms.CharField(label=_('Search')) + type = forms.CharField(required=False, label=_(u'Type')) + + def search(self): + if not self.is_valid(): + return self.no_query_found() + + if self.cleaned_data.get('q'): + sqs = self.searchqueryset.auto_query(self.cleaned_data['q']) + else: + sqs = self.searchqueryset.all() + + if self.cleaned_data['type']: + sqs = sqs.filter(type=self.cleaned_data['type']) + # if self.cleaned_data['type'] == 'user': + # sqs = self.searchqueryset.models(User) + # elif self.cleaned_data['type'] in ['message', 'thread']: + # sqs = self.searchqueryset.models(Message) + # elif self.cleaned_data['type'] == 'wiki': + # sqs = self.searchqueryset.models(Wiki) + # elif self.cleaned_data['type'] == 'changeset': + # sqs = self.searchqueryset.models(Changeset) + # elif self.cleaned_data['type'] == 'ticket': + # sqs = self.searchqueryset.models(Ticket) + # else: + # sqs = self.searchqueryset.all() + else: + sqs = self.searchqueryset.models(User, Message) + + + if self.load_all: + sqs = sqs.load_all() + + return sqs diff --git a/src/search/models.py b/src/search/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/src/search/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/src/search/tests.py b/src/search/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/search/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/search/views.py b/src/search/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/src/search/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/src/super_archives/search_indexes.py b/src/super_archives/search_indexes.py index 418c28c..0d9a86c 100644 --- a/src/super_archives/search_indexes.py +++ b/src/super_archives/search_indexes.py @@ -25,12 +25,17 @@ class MessageIndex(indexes.SearchIndex, indexes.Indexable): ) url = indexes.CharField(model_attr='url', null=True) + type = indexes.CharField() + def get_model(self): return Message def get_updated_field(self): return 'received_time' + def prepare_type(self, obj): + return u'thread' + def index_queryset(self, using=None): return self.get_model().objects.filter( thread__spam=False, spam=False -- libgit2 0.21.2