diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-27 17:32:46 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-05-27 17:32:46 -0600 |
commit | 9cdd0df1b628be1a2f5d79ccf168f77da2d14718 (patch) | |
tree | de7dbc89f2b145375a11ce447e8398c745de02c3 | |
parent | 41f622bde4d225bfe98e92f385d5e937618313be (diff) | |
download | askbot-9cdd0df1b628be1a2f5d79ccf168f77da2d14718.tar.gz askbot-9cdd0df1b628be1a2f5d79ccf168f77da2d14718.tar.bz2 askbot-9cdd0df1b628be1a2f5d79ccf168f77da2d14718.zip |
fixed bug in custom management commands and added the two missing commands
-rw-r--r-- | askbot/management/commands/askbot_clear_index.py | 87 | ||||
-rw-r--r-- | askbot/management/commands/askbot_rebuild_index.py | 76 | ||||
-rw-r--r-- | askbot/management/commands/askbot_update_index.py | 86 |
3 files changed, 244 insertions, 5 deletions
diff --git a/askbot/management/commands/askbot_clear_index.py b/askbot/management/commands/askbot_clear_index.py new file mode 100644 index 00000000..bb3b04b9 --- /dev/null +++ b/askbot/management/commands/askbot_clear_index.py @@ -0,0 +1,87 @@ +import sys +from optparse import make_option + +from django.core.management import get_commands, load_command_class +from django.utils.translation import activate as activate_language +from django.core.management.base import BaseCommand, CommandError +from django.conf import settings + +try: + from haystack.management.commands.clear_index import Command as ClearCommand + haystack_option_list = [option for option in ClearCommand.base_options if not option.get_opt_string() != '--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()) + options['using'] = ['default_%s' % lang_code[:2],] + activate_language(lang_code) + + klass = self._get_command_class('clear_index') + klass.handle(*args, **options) + + def _get_command_class(self, name): + try: + app_name = get_commands()[name] + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + klass = app_name + else: + klass = load_command_class(app_name, name) + except KeyError: + raise CommandError("Unknown command: %r" % name) + return klass + + + def execute(self, *args, **options): + """ + Try to execute this command, performing model validation if + needed (as controlled by the attribute + ``self.requires_model_validation``). If the command raises a + ``CommandError``, intercept it and print it sensibly to + stderr. + """ + show_traceback = options.get('traceback', False) + + if self.can_import_settings: + try: + #language part used to be here + pass + except ImportError, e: + # If settings should be available, but aren't, + # raise the error and quit. + if show_traceback: + traceback.print_exc() + else: + sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) + + try: + self.stdout = options.get('stdout', sys.stdout) + self.stderr = options.get('stderr', sys.stderr) + if self.requires_model_validation: + self.validate() + output = self.handle(*args, **options) + if output: + if self.output_transaction: + # This needs to be imported here, because it relies on + # settings. + from django.db import connections, DEFAULT_DB_ALIAS + connection = connections[options.get('database', DEFAULT_DB_ALIAS)] + if connection.ops.start_transaction_sql(): + self.stdout.write(self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()) + '\n') + self.stdout.write(output) + if self.output_transaction: + self.stdout.write('\n' + self.style.SQL_KEYWORD("COMMIT;") + '\n') + except CommandError, e: + if show_traceback: + traceback.print_exc() + else: + self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) diff --git a/askbot/management/commands/askbot_rebuild_index.py b/askbot/management/commands/askbot_rebuild_index.py index 204f3b56..366bad53 100644 --- a/askbot/management/commands/askbot_rebuild_index.py +++ b/askbot/management/commands/askbot_rebuild_index.py @@ -1,8 +1,9 @@ +import sys from optparse import make_option -from django.core.management import call_command +from django.core.management import get_commands, load_command_class from django.utils.translation import activate as activate_language -from django.core.management.base import BaseCommand +from django.core.management.base import BaseCommand, CommandError from django.conf import settings try: @@ -19,8 +20,73 @@ class Command(BaseCommand): help='Language to user, in language code format'),] option_list = list(BaseCommand.option_list) + haystack_option_list + base_options - def handle(self, **options): + def handle(self, *args, **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) + activate_language(lang_code) + + klass = self._get_command_class('clear_index') + klass.handle(*args, **options) + + klass = self._get_command_class('update_index') + klass.handle(*args, **options) + + def _get_command_class(self, name): + try: + app_name = get_commands()[name] + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + klass = app_name + else: + klass = load_command_class(app_name, name) + except KeyError: + raise CommandError("Unknown command: %r" % name) + return klass + + + def execute(self, *args, **options): + """ + Try to execute this command, performing model validation if + needed (as controlled by the attribute + ``self.requires_model_validation``). If the command raises a + ``CommandError``, intercept it and print it sensibly to + stderr. + """ + show_traceback = options.get('traceback', False) + + if self.can_import_settings: + try: + #language part used to be here + pass + except ImportError, e: + # If settings should be available, but aren't, + # raise the error and quit. + if show_traceback: + traceback.print_exc() + else: + sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) + + try: + self.stdout = options.get('stdout', sys.stdout) + self.stderr = options.get('stderr', sys.stderr) + if self.requires_model_validation: + self.validate() + output = self.handle(*args, **options) + if output: + if self.output_transaction: + # This needs to be imported here, because it relies on + # settings. + from django.db import connections, DEFAULT_DB_ALIAS + connection = connections[options.get('database', DEFAULT_DB_ALIAS)] + if connection.ops.start_transaction_sql(): + self.stdout.write(self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()) + '\n') + self.stdout.write(output) + if self.output_transaction: + self.stdout.write('\n' + self.style.SQL_KEYWORD("COMMIT;") + '\n') + except CommandError, e: + if show_traceback: + traceback.print_exc() + else: + self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) diff --git a/askbot/management/commands/askbot_update_index.py b/askbot/management/commands/askbot_update_index.py new file mode 100644 index 00000000..2499878d --- /dev/null +++ b/askbot/management/commands/askbot_update_index.py @@ -0,0 +1,86 @@ +import sys +from optparse import make_option + +from django.core.management import get_commands, load_command_class +from django.utils.translation import activate as activate_language +from django.core.management.base import BaseCommand, CommandError +from django.conf import settings + +try: + 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'] +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],] + klass = self._get_command_class('update_index') + klass.handle(*args, **options) + + def _get_command_class(self, name): + try: + app_name = get_commands()[name] + if isinstance(app_name, BaseCommand): + # If the command is already loaded, use it directly. + klass = app_name + else: + klass = load_command_class(app_name, name) + except KeyError: + raise CommandError("Unknown command: %r" % name) + return klass + + + def execute(self, *args, **options): + """ + Try to execute this command, performing model validation if + needed (as controlled by the attribute + ``self.requires_model_validation``). If the command raises a + ``CommandError``, intercept it and print it sensibly to + stderr. + """ + show_traceback = options.get('traceback', False) + + if self.can_import_settings: + try: + #language part used to be here + pass + except ImportError, e: + # If settings should be available, but aren't, + # raise the error and quit. + if show_traceback: + traceback.print_exc() + else: + sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) + + try: + self.stdout = options.get('stdout', sys.stdout) + self.stderr = options.get('stderr', sys.stderr) + if self.requires_model_validation: + self.validate() + output = self.handle(*args, **options) + if output: + if self.output_transaction: + # This needs to be imported here, because it relies on + # settings. + from django.db import connections, DEFAULT_DB_ALIAS + connection = connections[options.get('database', DEFAULT_DB_ALIAS)] + if connection.ops.start_transaction_sql(): + self.stdout.write(self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()) + '\n') + self.stdout.write(output) + if self.output_transaction: + self.stdout.write('\n' + self.style.SQL_KEYWORD("COMMIT;") + '\n') + except CommandError, e: + if show_traceback: + traceback.print_exc() + else: + self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) + sys.exit(1) |