[mod] searx uses flask framework only in webapp.py. Make migration to another framework easier.

This commit is contained in:
Alexandre Flament 2017-01-02 12:06:04 +01:00
parent 3d8c9bab96
commit 84a2c97a65
4 changed files with 21 additions and 24 deletions

View File

@ -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:

View File

@ -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

View File

@ -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'))

View File

@ -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)