[refactor] typification of SearXNG / EngineResults

In [1] and [2] we discussed the need of a Result.results property and how we can
avoid unclear code.  This patch implements a class for the reslut-lists of
engines::

    searx.result_types.EngineResults

A simple example for the usage in engine development::

    from searx.result_types import EngineResults
    ...
    def response(resp) -> EngineResults:
        res = EngineResults()
        ...
        res.add( res.types.Answer(answer="lorem ipsum ..", url="https://example.org") )
        ...
        return res

[1] https://github.com/searxng/searxng/pull/4183#pullrequestreview-257400034
[2] https://github.com/searxng/searxng/pull/4183#issuecomment-2614301580
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Markus Heiser 2025-01-27 16:43:43 +01:00 committed by Markus Heiser
parent edfbf1e118
commit 36a1ef1239
26 changed files with 195 additions and 140 deletions

View file

@ -13,6 +13,7 @@ close to the implementation, its just a simple example. To get in use of this
"""
import json
from searx.result_types import EngineResults
engine_type = 'offline'
categories = ['general']
@ -48,14 +49,14 @@ def init(engine_settings=None):
)
def search(query, request_params):
def search(query, request_params) -> EngineResults:
"""Query (offline) engine and return results. Assemble the list of results from
your local engine. In this demo engine we ignore the 'query' term, usual
you would pass the 'query' term to your local engine to filter out the
results.
"""
ret_val = []
res = EngineResults()
result_list = json.loads(_my_offline_engine)
@ -67,6 +68,6 @@ def search(query, request_params):
# choose a result template or comment out to use the *default*
'template': 'key-value.html',
}
ret_val.append(entry)
res.append(entry)
return ret_val
return res