diff --git a/searx/search.py b/searx/search.py index b5777c7ed6ccc9cf187cb91c4e718b00c2a14760..195d836c770f69c7bfe09eb6fde713aa72a427a3 100644 --- a/searx/search.py +++ b/searx/search.py @@ -24,6 +24,7 @@ import requests.exceptions from flask_babel import gettext import searx.poolrequests as requests_lib +from searx import search_database from searx import logger from searx.answerers import ask from searx.engines import ( @@ -34,6 +35,7 @@ from searx.plugins import plugins from searx.query import RawTextQuery, SearchQuery, VALID_LANGUAGE_CODE from searx.results import ResultContainer from searx.utils import gen_useragent +from searx.plugins import plugins from _thread import start_new_thread @@ -266,6 +268,28 @@ def get_search_query_from_webapp(preferences, form): query_time_range) +def search(request, host): + """ Entry point to perform search request on engines + """ + search_query = get_search_query_from_webapp(request.preferences, request.form) + searchData = search_database.read(search_query, host) + if searchData is None: + result_container = Search(search_query).search() + searchData = search_database.get_search_data(search_query, result_container) + threading.Thread( + target=search_database.save, + args=(searchData, host), + name='save_search_' + str(searchData) + ).start() + + ordered_plugin = request.user_plugins + plugins.call(ordered_plugin, 'post_search', request, searchData) + + for result in searchData.results: + plugins.call(ordered_plugin, 'on_result', request, searchData, result) + return searchData + + class Search(object): """Search information container""" diff --git a/searx/search_database.py b/searx/search_database.py index c9f74e6bfea15850106f1b0cc465808cd5be163e..2ba7ab0c2b7382c8554ae838b55aad0d5701103c 100644 --- a/searx/search_database.py +++ b/searx/search_database.py @@ -7,7 +7,6 @@ import redis from searx import settings from searx.plugins import plugins from searx.query import SearchQuery -from searx.search import Search, get_search_query_from_webapp from searx.url_utils import urlparse @@ -131,22 +130,6 @@ def get_search_data(q, r): r.infoboxes, r.suggestions, r.unresponsive_engines) -def search(request, host): - search_query = get_search_query_from_webapp(request.preferences, request.form) - searchData = read(search_query, host) - if searchData is None: - result_container = Search(search_query).search() - searchData = get_search_data(search_query, result_container) - threading.Thread(target=save, args=(searchData, host), name='save_search_' + str(searchData)).start() - - ordered_plugin = request.user_plugins - plugins.call(ordered_plugin, 'post_search', request, searchData) - - for result in searchData.results: - plugins.call(ordered_plugin, 'on_result', request, searchData, result) - return searchData - - def update(d, host): conn = redis.StrictRedis(host) key = "SEARCH_HISTORY:{}:{}:{}:{}:{}:{}:{}".format( diff --git a/searx/webapp.py b/searx/webapp.py index 58de17912862a8538ae2fcd1fa83cb661c3aebd1..9a6dfd99a365f8cc3a5a16f8c5efffd9cd51cea1 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -68,7 +68,7 @@ from searx.utils import ( ) from searx.version import VERSION_STRING from searx.languages import language_codes as languages -from searx.search import Search +from searx.search import Search, search from searx.query import RawTextQuery from searx.autocomplete import searx_bang, backends as autocomplete_backends from searx.plugins import plugins @@ -77,7 +77,7 @@ from searx.preferences import Preferences, ValidationException, LANGUAGE_CODES from searx.answerers import answerers from searx.url_utils import urlencode, urlparse, urljoin from searx.utils import new_hmac -from searx.search_database import get_twenty_queries, search +from searx.search_database import get_twenty_queries import threading # check if the pyopenssl package is installed.