diff --git a/searx/plugins/__init__.py b/searx/plugins/__init__.py index 768a510af..011d36260 100644 --- a/searx/plugins/__init__.py +++ b/searx/plugins/__init__.py @@ -63,9 +63,9 @@ class PluginStore(): plugin.id = plugin.name.replace(' ', '_') self.plugins.append(plugin) - def call(self, plugin_type, request, *args, **kwargs): + def call(self, ordered_plugin_list, plugin_type, request, *args, **kwargs): ret = True - for plugin in request.user_plugins: + for plugin in ordered_plugin_list: if hasattr(plugin, plugin_type): ret = getattr(plugin, plugin_type)(request, *args, **kwargs) if not ret: diff --git a/searx/search.py b/searx/search.py index e0f0cfd6a..0159d45b8 100644 --- a/searx/search.py +++ b/searx/search.py @@ -395,19 +395,20 @@ class SearchWithPlugins(Search): """Similar to the Search class but call the plugins.""" - def __init__(self, search_query, request): + def __init__(self, search_query, ordered_plugin_list, request): super(SearchWithPlugins, self).__init__(search_query) + self.ordered_plugin_list = ordered_plugin_list self.request = request def search(self): - if plugins.call('pre_search', self.request, self): + if plugins.call(self.ordered_plugin_list, 'pre_search', self.request, self): super(SearchWithPlugins, self).search() - plugins.call('post_search', self.request, self) + plugins.call(self.ordered_plugin_list, 'post_search', self.request, self) results = self.result_container.get_ordered_results() for result in results: - plugins.call('on_result', self.request, self, result) + plugins.call(self.ordered_plugin_list, 'on_result', self.request, self, result) return self.result_container diff --git a/searx/webapp.py b/searx/webapp.py index 4fee6e588..58f9815f9 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -419,7 +419,7 @@ def index(): try: search_query = get_search_query_from_webapp(request.preferences, request.form) # search = Search(search_query) # without plugins - search = SearchWithPlugins(search_query, request) + search = SearchWithPlugins(search_query, request.user_plugins, request) result_container = search.search() except: request.errors.append(gettext('search error')) diff --git a/tests/unit/test_plugins.py b/tests/unit/test_plugins.py index c9e65dfcb..78dcea478 100644 --- a/tests/unit/test_plugins.py +++ b/tests/unit/test_plugins.py @@ -28,14 +28,12 @@ class PluginStoreTest(SearxTestCase): testplugin = plugins.Plugin() store.register(testplugin) setattr(testplugin, 'asdf', Mock()) - request = Mock(user_plugins=[]) - store.call('asdf', request, Mock()) + request = Mock() + store.call([], 'asdf', request, Mock()) self.assertFalse(testplugin.asdf.called) - request.user_plugins.append(testplugin) - store.call('asdf', request, Mock()) - + store.call([testplugin], 'asdf', request, Mock()) self.assertTrue(testplugin.asdf.called) @@ -48,42 +46,40 @@ class SelfIPTest(SearxTestCase): self.assertTrue(len(store.plugins) == 1) # IP test - request = Mock(user_plugins=store.plugins, - remote_addr='127.0.0.1') + request = Mock(remote_addr='127.0.0.1') request.headers.getlist.return_value = [] search = get_search_mock(query='ip', pageno=1) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertTrue('127.0.0.1' in search.result_container.answers) search = get_search_mock(query='ip', pageno=2) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertFalse('127.0.0.1' in search.result_container.answers) # User agent test - request = Mock(user_plugins=store.plugins, - user_agent='Mock') + request = Mock(user_agent='Mock') request.headers.getlist.return_value = [] search = get_search_mock(query='user-agent', pageno=1) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertTrue('Mock' in search.result_container.answers) search = get_search_mock(query='user-agent', pageno=2) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertFalse('Mock' in search.result_container.answers) search = get_search_mock(query='user-agent', pageno=1) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertTrue('Mock' in search.result_container.answers) search = get_search_mock(query='user-agent', pageno=2) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertFalse('Mock' in search.result_container.answers) search = get_search_mock(query='What is my User-Agent?', pageno=1) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertTrue('Mock' in search.result_container.answers) search = get_search_mock(query='What is my User-Agent?', pageno=2) - store.call('post_search', request, search) + store.call(store.plugins, 'post_search', request, search) self.assertFalse('Mock' in search.result_container.answers)