Source code for searx.result_types

# SPDX-License-Identifier: AGPL-3.0-or-later
"""Typification of the result items generated by the *engines*, *answerers* and
*plugins*.

.. note::

   We are at the beginning of typing the results.  Further typing will follow,
   but this is a very large task that we will only be able to implement
   gradually.  For more, please read :ref:`result types`.

"""
# pylint: disable=too-few-public-methods


__all__ = [
    "Result",
    "MainResult",
    "KeyValue",
    "EngineResults",
    "AnswerSet",
    "Answer",
    "Translations",
    "WeatherAnswer",
    "Code",
    "Paper",
    "File",
]

import typing as t
import abc

from ._base import Result, MainResult, LegacyResult
from .answer import AnswerSet, Answer, Translations, WeatherAnswer
from .keyvalue import KeyValue
from .code import Code
from .paper import Paper
from .file import File
from .image import Image


[docs] class ResultList(list[Result | LegacyResult], abc.ABC): """Base class of all result lists (abstract).""" @t.final class types: # pylint: disable=invalid-name """The collection of result types (which have already been implemented).""" Answer = Answer KeyValue = KeyValue Code = Code Paper = Paper File = File Image = Image MainResult = MainResult Result = Result Translations = Translations WeatherAnswer = WeatherAnswer # for backward compatibility LegacyResult = LegacyResult def __init__(self): # pylint: disable=useless-parent-delegation super().__init__() def add(self, result: Result | LegacyResult): """Add a :py:`Result` item to the result list.""" self.append(result)
[docs] class EngineResults(ResultList): """Result list that should be used by engine developers. For convenience, engine developers don't need to import types / see :py:obj:`ResultList.types`. .. code:: python 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 """