mirror of
https://github.com/searxng/searxng.git
synced 2025-07-24 13:49:26 +02:00
Clean up the architecture
Purposes : - isolate the plugins calls - distinction between parsing the web request and running the search (Search class). To be able to test code easily, to run searx code outside a web server, to filter the search query parameters with plugins more easily, etc... Details : - request.request_data contains request.form or request.args (initialize inside pre_request() function) - Query class is renamed RawTextQuery - SearchQuery class defines all search parameters - get_search_query_from_webapp create a SearchQuery instance (basically the previous Search.__init__ code) - Search class and SearchWithPlugins class takes a SearchQuery instance as class constructor parameter - SearchWithPlugins class inherites from Search class, and run plugins - A dedicated function search_with_plugins executes plugins to have a well define locals() (which is used by the plugins code). - All plugins code is executed inside the try...except block (webapp.py, index function) - advanced_search HTTP parameter value stays in webapp.py (it is only part of UI) - multiple calls to result_container.get_ordered_results() doesn't compute the order multiple time (note : this method was call only once before) - paging value is stored in the result_container class (compute in the extend method) - test about engine.suspend_end_time is done during search method call (instead of __init__) - check that the format parameter value is one of these : html, rss, json, rss (before the html value was assumed but some text formatting wasn't not done)
This commit is contained in:
parent
142cd87095
commit
67e11c42b9
6 changed files with 272 additions and 202 deletions
|
@ -128,6 +128,8 @@ class ResultContainer(object):
|
|||
self.suggestions = set()
|
||||
self.answers = set()
|
||||
self._number_of_results = []
|
||||
self._ordered = False
|
||||
self.paging = False
|
||||
|
||||
def extend(self, engine_name, results):
|
||||
for result in list(results):
|
||||
|
@ -153,6 +155,9 @@ class ResultContainer(object):
|
|||
|
||||
self.results[engine_name].extend(results)
|
||||
|
||||
if not self.paging and engines[engine_name].paging:
|
||||
self.paging = True
|
||||
|
||||
for i, result in enumerate(results):
|
||||
try:
|
||||
result['url'] = result['url'].decode('utf-8')
|
||||
|
@ -219,7 +224,7 @@ class ResultContainer(object):
|
|||
with RLock():
|
||||
self._merged_results.append(result)
|
||||
|
||||
def get_ordered_results(self):
|
||||
def order_results(self):
|
||||
for result in self._merged_results:
|
||||
score = result_score(result)
|
||||
result['score'] = score
|
||||
|
@ -269,8 +274,14 @@ class ResultContainer(object):
|
|||
# update categoryIndex
|
||||
categoryPositions[category] = {'index': len(gresults), 'count': 8}
|
||||
|
||||
# return gresults
|
||||
return gresults
|
||||
# update _merged_results
|
||||
self._ordered = True
|
||||
self._merged_results = gresults
|
||||
|
||||
def get_ordered_results(self):
|
||||
if not self._ordered:
|
||||
self.order_results()
|
||||
return self._merged_results
|
||||
|
||||
def results_length(self):
|
||||
return len(self._merged_results)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue