diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-23 19:01:54 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-23 19:01:54 -0600 |
commit | 758a5f81665b8df622355dfa23a74d03aebd707c (patch) | |
tree | 84ed68374003132ecc97aa1e3ab65a2d5540e03f | |
parent | e8cd15bd48920705e3b5e71fdccbfa55176ce76d (diff) | |
download | askbot-758a5f81665b8df622355dfa23a74d03aebd707c.tar.gz askbot-758a5f81665b8df622355dfa23a74d03aebd707c.tar.bz2 askbot-758a5f81665b8df622355dfa23a74d03aebd707c.zip |
added askbot_rebuild_index command, need more testing and debuggin
-rw-r--r-- | askbot/management/commands/askbot_rebuild_index.py | 26 | ||||
-rw-r--r-- | askbot/search/haystack/__init__.py | 21 | ||||
-rw-r--r-- | askbot/search/haystack/routers.py | 7 |
3 files changed, 43 insertions, 11 deletions
diff --git a/askbot/management/commands/askbot_rebuild_index.py b/askbot/management/commands/askbot_rebuild_index.py new file mode 100644 index 00000000..204f3b56 --- /dev/null +++ b/askbot/management/commands/askbot_rebuild_index.py @@ -0,0 +1,26 @@ +from optparse import make_option + +from django.core.management import call_command +from django.utils.translation import activate as activate_language +from django.core.management.base import BaseCommand +from django.conf import settings + +try: + from haystack.management.commands.clear_index import Command as ClearCommand + from haystack.management.commands.update_index import Command as UpdateCommand + haystack_option_list = [option for option in UpdateCommand.base_options if option.get_opt_string() != '--verbosity'] + \ + [option for option in ClearCommand.base_options if not option.get_opt_string() in ['--using', '--verbosity']] +except ImportError: + haystack_option_list = [] + +class Command(BaseCommand): + help = "Completely rebuilds the search index by removing the old data and then updating." + base_options = [make_option("-l", "--language", action="store", type="string", dest="language", + help='Language to user, in language code format'),] + option_list = list(BaseCommand.option_list) + haystack_option_list + base_options + + def handle(self, **options): + lang_code = options.get('language', settings.LANGUAGE_CODE.lower()) + activate_language(lang_code) + options['using'] = ['default_%s' % lang_code[:2],] + call_command('rebuild_index', **options) diff --git a/askbot/search/haystack/__init__.py b/askbot/search/haystack/__init__.py index aab0966c..f2905233 100644 --- a/askbot/search/haystack/__init__.py +++ b/askbot/search/haystack/__init__.py @@ -15,7 +15,12 @@ class ThreadIndex(indexes.SearchIndex, indexes.Indexable): return Thread def index_queryset(self, using=None): - return self.get_model().objects.filter(posts__deleted=False) + if getattr(settings, 'ASKBOT_MULTILINGUAL', True): + lang_code = get_language()[:2] + return self.get_model().objects.filter(language_code=lang_code, + posts__deleted=False) + else: + return self.get_model().objects.filter(posts__deleted=False) def prepare_tags(self, obj): return [tag.name for tag in obj.tags.all()] @@ -30,7 +35,12 @@ class PostIndex(indexes.SearchIndex, indexes.Indexable): return Post def index_queryset(self, using=None): - return self.get_model().objects.filter(deleted=False) + if getattr(settings, 'ASKBOT_MULTILINGUAL', True): + lang_code = get_language()[:2] + return self.get_model().objects.filter(language_code=lang_code, + deleted=False) + else: + return self.get_model().objects.filter(deleted=False) class UserIndex(indexes.SearchIndex, indexes.Indexable): text = indexes.CharField(document=True, use_template=True) @@ -90,9 +100,4 @@ class AskbotSearchQuerySet(SearchQuerySet): if model_klass == User: return model_klass.objects.filter(id__in=set(id_list)) else: - if getattr(settings, 'ASKBOT_MULTILINGUAL', True): - language_code = get_language() - return model_klass.objects.filter(id__in=set(id_list), - language_code=language_code) - else: - return model_klass.objects.filter(id__in=set(id_list)) + return model_klass.objects.filter(id__in=set(id_list)) diff --git a/askbot/search/haystack/routers.py b/askbot/search/haystack/routers.py index f015d954..7b7e0a4b 100644 --- a/askbot/search/haystack/routers.py +++ b/askbot/search/haystack/routers.py @@ -1,5 +1,4 @@ from django.utils.translation import get_language -from django.conf import settings from haystack.routers import BaseRouter from haystack.constants import DEFAULT_ALIAS @@ -7,13 +6,15 @@ from haystack.constants import DEFAULT_ALIAS class LanguageRouter(BaseRouter): def for_read(self, **hints): + from django.conf import settings if getattr(settings, 'ASKBOT_MULTILINGUAL'): - return 'default_' + get_language() + return 'default_' + get_language()[:2] else: return DEFAULT_ALIAS def for_write(self, **hints): + from django.conf import settings if getattr(settings, 'ASKBOT_MULTILINGUAL'): - return 'default_' + get_language() + return 'default_' + get_language()[:2] else: return DEFAULT_ALIAS |