search: change registration to take a function (#26260)

This commit is contained in:
Frédéric Péters 2019-01-01 14:08:50 +01:00
parent 0257b17ac9
commit 9c2e369036
3 changed files with 25 additions and 16 deletions

View File

@ -18,26 +18,25 @@ from django.conf import settings
class Engines(object):
"""Singleton object that serves as a registry of classes providing search
engines."""
"""Singleton object that serves as a registry of search engines."""
def __init__(self):
self.engines = {}
self.engines = []
def register(self, key, **options):
self.engines[key] = options
def register(self, method):
self.engines.append(method)
def get(self, key):
if key in settings.COMBO_SEARCH_SERVICES:
return settings.COMBO_SEARCH_SERVICES[key]
return self.engines.get(key)
return self.get_engines().get(key)
def get_engines(self):
data = {}
for get_engines in self.engines:
data.update(get_engines() or {})
for key in settings.COMBO_SEARCH_SERVICES:
data[key] = settings.COMBO_SEARCH_SERVICES[key]
for key in self.engines:
data[key] = self.engines[key]
return data
engines = Engines() # singleton object

View File

@ -25,10 +25,15 @@ class AppConfig(django.apps.AppConfig):
def ready(self):
from combo.apps.search import engines
engines.register('tracking-code',
url=reverse('wcs-tracking-code-search') + '?q=%(q)s',
label=_('Tracking Code')
)
engines.register(self.get_search_engines)
def get_search_engines(self):
return {
'tracking-code': {
'url': reverse('wcs-tracking-code-search') + '?q=%(q)s',
'label': _('Tracking Code'),
}
}
def get_before_urls(self):
from . import urls

View File

@ -26,7 +26,12 @@ class DataConfig(AppConfig):
def ready(self):
# register built-in search engine for page contents
from combo.apps.search import engines
engines.register('_text',
url=reverse('api-search') + '?q=%(q)s',
label=_('Page Contents')
)
engines.register(self.get_search_engines)
def get_search_engines(self):
return {
'_text': {
'url': reverse('api-search') + '?q=%(q)s',
'label': _('Page Contents'),
}
}