From 64f49dad92163cda7d7cb423735d577f70312c01 Mon Sep 17 00:00:00 2001 From: "Alexander V. Nikolaev" Date: Sun, 10 Apr 2011 01:01:51 +0300 Subject: [PATCH 1/3] Awareness of multi-database configuration (get data from 'default') --- djangosphinx/utils/config.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/djangosphinx/utils/config.py b/djangosphinx/utils/config.py index 24a1907..21cb9b8 100644 --- a/djangosphinx/utils/config.py +++ b/djangosphinx/utils/config.py @@ -11,11 +11,18 @@ __all__ = ('generate_config_for_model', 'generate_config_for_models') def _get_database_engine(): - if settings.DATABASE_ENGINE == 'mysql': - return settings.DATABASE_ENGINE - elif settings.DATABASE_ENGINE.startswith('postgresql'): + if getattr(settings, 'DATABASES', None) is None: + engine = settings.DATABASE_ENGINE + else: + engine = settings.DATABASES['default']['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 = ( @@ -188,4 +195,4 @@ def _the_tuple(f): c = Context(params) - return t.render(c) \ No newline at end of file + return t.render(c) From a6bfc7b6dc16daa8ee8cc4aa9862fcef8b46bf60 Mon Sep 17 00:00:00 2001 From: "Alexander V. Nikolaev" Date: Mon, 11 Apr 2011 19:43:23 +0300 Subject: [PATCH 2/3] All parameters taken from new-style database configuration Allow to set log_file, query_log and data_path via setting.py and export then to template --- djangosphinx/utils/config.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/djangosphinx/utils/config.py b/djangosphinx/utils/config.py index 21cb9b8..32ed219 100644 --- a/djangosphinx/utils/config.py +++ b/djangosphinx/utils/config.py @@ -10,11 +10,13 @@ __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 getattr(settings, 'DATABASES', None) is None: - engine = settings.DATABASE_ENGINE - else: - engine = settings.DATABASES['default']['ENGINE'] + engine = _get_database_value('ENGINE') if '.' in engine: engine = engine.rsplit('.', 1)[1] if engine == 'mysql': @@ -56,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): From fc682d223c109b8a7bdcb0e23fb9d2e8e31fb5f9 Mon Sep 17 00:00:00 2001 From: "Alexander V. Nikolaev" Date: Mon, 11 Apr 2011 19:45:17 +0300 Subject: [PATCH 3/3] Export into configuration template same values as in model config generator --- djangosphinx/config.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) 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)