diff --git a/djangosphinx/config.py b/djangosphinx/config.py index 4b8f69f..62f73b1 100644 --- a/djangosphinx/config.py +++ b/djangosphinx/config.py @@ -10,6 +10,7 @@ raise ValueError('`DJANGO_SETTINGS_MODULE` was not set. Please use DJANGO_SETTINGS_MODULE=project.settings --config sphinx.py.') from django.conf import settings +from djangosphinx.utils.config import DEFAULT_SPHINX_PARAMS assert getattr(settings, 'SPHINX_ROOT', None) is not None, "You must specify `SPHINX_ROOT` in your settings." @@ -36,21 +37,15 @@ def relative_path(*args): 'SPHINX_PORT': getattr(settings, 'SPHINX_PORT', '3312'), 'relative_path': relative_path, } -if getattr(settings, 'DATABASES', None): - context.update({ - 'DATABASE_HOST': settings.DATABASES['default']['HOST'], - 'DATABASE_PASSWORD': settings.DATABASES['default']['PASSWORD'], - 'DATABASE_USER': settings.DATABASES['default']['USER'], - 'DATABASE_PORT': settings.DATABASES['default']['PORT'], - 'DATABASE_NAME': settings.DATABASES['default']['NAME'], - }) -else: - context.update({ - 'DATABASE_HOST': settings.DATABASE_HOST, - 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, - 'DATABASE_USER': settings.DATABASE_USER, - 'DATABASE_PORT': settings.DATABASE_PORT, - 'DATABASE_NAME': settings.DATABASE_NAME, - }) +context.update(DEFAULT_SPHINX_PARAMS) + +# Old code works with uppercased params +context.update({ + 'DATABASE_HOST': DEFAULT_SPHINX_PARAMS['database_host'], + 'DATABASE_PASSWORD': DEFAULT_SPHINX_PARAMS['database_password'], + 'DATABASE_USER': DEFAULT_SPHINX_PARAMS['database_user'], + 'DATABASE_PORT': DEFAULT_SPHINX_PARAMS['database_port'], + 'DATABASE_NAME': DEFAULT_SPHINX_PARAMS['database_name'], +}) print render_to_string(getattr(settings, 'SPHINX_CONFIG_TEMPLATE', 'conf/sphinx.conf'), context) diff --git a/djangosphinx/utils/config.py b/djangosphinx/utils/config.py index 24a1907..32ed219 100644 --- a/djangosphinx/utils/config.py +++ b/djangosphinx/utils/config.py @@ -10,12 +10,21 @@ __all__ = ('generate_config_for_model', 'generate_config_for_models') +def _get_database_value(param): + if hasattr(settings, 'DATABASES'): + return settings.DATABASES['default'][param] + return getattr(settings, 'DATABASE_'+param) + def _get_database_engine(): - if settings.DATABASE_ENGINE == 'mysql': - return settings.DATABASE_ENGINE - elif settings.DATABASE_ENGINE.startswith('postgresql'): + engine = _get_database_value('ENGINE') + if '.' in engine: + engine = engine.rsplit('.', 1)[1] + if engine == 'mysql': + return engine + elif engine.startswith('postgresql'): return 'pgsql' - raise ValueError, "Only MySQL and PostgreSQL engines are supported by Sphinx." + raise ValueError( + "Only MySQL and PostgreSQL engines are supported by Sphinx. %r" % (engine)) def _get_template(name): paths = ( @@ -49,13 +58,15 @@ def _is_sourcable_field(field): # No trailing slashes on paths DEFAULT_SPHINX_PARAMS = { 'database_engine': _get_database_engine(), - 'database_host': settings.DATABASE_HOST, - 'database_port': settings.DATABASE_PORT, - 'database_name': settings.DATABASE_NAME, - 'database_user': settings.DATABASE_USER, - 'database_password': settings.DATABASE_PASSWORD, - 'log_file': '/var/log/sphinx/searchd.log', - 'data_path': '/var/data', + 'database_host': _get_database_value('HOST'), + 'database_port': _get_database_value('PORT'), + 'database_name': _get_database_value('NAME'), + 'database_user': _get_database_value('USER'), + 'database_password': _get_database_value('PASSWORD'), + 'log_file': getattr(settings, 'SPHINX_LOG','/var/log/sphinx/searchd.log'), + 'querylog_file': + getattr(settings, 'SPHINX_QUERY_LOG','/var/log/sphinx/query.log'), + 'data_path': getattr(settings, 'SPHINX_DATA_PATH', '/var/data'), } def get_index_context(index): @@ -188,4 +199,4 @@ def _the_tuple(f): c = Context(params) - return t.render(c) \ No newline at end of file + return t.render(c)