diff --git a/wagtail/wagtailsearch/backends/__init__.py b/wagtail/wagtailsearch/backends/__init__.py index 36e7fe8d11..cc0b3e6167 100644 --- a/wagtail/wagtailsearch/backends/__init__.py +++ b/wagtail/wagtailsearch/backends/__init__.py @@ -15,6 +15,17 @@ class InvalidSearchBackendError(ImproperlyConfigured): pass +def get_search_backend_config(): + search_backends = getattr(settings, 'WAGTAILSEARCH_BACKENDS', {}) + + # Make sure the default backend is always defined + search_backends.setdefault('default', { + 'BACKEND': 'wagtail.wagtailsearch.backends.db', + }) + + return search_backends + + def import_backend(dotted_path): """ Theres two formats for the dotted_path. @@ -39,19 +50,12 @@ def import_backend(dotted_path): def get_search_backend(backend='default', **kwargs): - # Get configuration - default_conf = { - 'default': { - 'BACKEND': 'wagtail.wagtailsearch.backends.db', - }, - } - WAGTAILSEARCH_BACKENDS = getattr( - settings, 'WAGTAILSEARCH_BACKENDS', default_conf) + search_backends = get_search_backend_config() # Try to find the backend try: # Try to get the WAGTAILSEARCH_BACKENDS entry for the given backend name first - conf = WAGTAILSEARCH_BACKENDS[backend] + conf = search_backends[backend] except KeyError: try: # Trying to import the given backend, in case it's a dotted path @@ -92,14 +96,12 @@ def _backend_requires_auto_update(backend_name, params): def get_search_backends_with_name(with_auto_update=False): - if hasattr(settings, 'WAGTAILSEARCH_BACKENDS'): - for backend, params in settings.WAGTAILSEARCH_BACKENDS.items(): - if with_auto_update and _backend_requires_auto_update(backend, params) is False: - continue + search_backends = get_search_backend_config() + for backend, params in search_backends.items(): + if with_auto_update and _backend_requires_auto_update(backend, params) is False: + continue - yield backend, get_search_backend(backend) - else: - yield 'default', get_search_backend('default') + yield backend, get_search_backend(backend) def get_search_backends(with_auto_update=False): diff --git a/wagtail/wagtailsearch/tests/test_backends.py b/wagtail/wagtailsearch/tests/test_backends.py index bd168c7404..a115e8e626 100644 --- a/wagtail/wagtailsearch/tests/test_backends.py +++ b/wagtail/wagtailsearch/tests/test_backends.py @@ -186,6 +186,15 @@ class TestBackendLoader(TestCase): self.assertEqual(len(backends), 1) self.assertIsInstance(backends[0], DBSearch) + @override_settings( + WAGTAILSEARCH_BACKENDS={} + ) + def test_get_search_backends_with_no_default_defined(self): + backends = list(get_search_backends()) + + self.assertEqual(len(backends), 1) + self.assertIsInstance(backends[0], DBSearch) + @override_settings( WAGTAILSEARCH_BACKENDS={ 'default': {