summaryrefslogtreecommitdiff
path: root/searx/result_types
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarit.de>2025-03-05 17:46:23 +0100
committerMarkus Heiser <markus.heiser@darmarIT.de>2025-03-15 10:36:33 +0100
commitaf5dbdf768d56d26669a54e532bef3238e3de2e4 (patch)
tree14dcf8e7f94bb7dec787e98d7c9bef3f4704fcb2 /searx/result_types
parent8769b7c6d6d62b961d62b9454bd12f69fba298c8 (diff)
[mod] typification of SearXNG: add new result type KeyValue
This patch adds a new result type: KeyValue - Python class: searx/result_types/keyvalue.py - Jinja template: searx/templates/simple/result_templates/keyvalue.html - CSS (less) client/simple/src/less/result_types/keyvalue.less Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/result_types')
-rw-r--r--searx/result_types/__init__.py4
-rw-r--r--searx/result_types/keyvalue.py49
2 files changed, 52 insertions, 1 deletions
diff --git a/searx/result_types/__init__.py b/searx/result_types/__init__.py
index 9af16b9b5..e9a115ec3 100644
--- a/searx/result_types/__init__.py
+++ b/searx/result_types/__init__.py
@@ -13,7 +13,7 @@
from __future__ import annotations
-__all__ = ["Result", "MainResult", "EngineResults", "AnswerSet", "Answer", "Translations"]
+__all__ = ["Result", "MainResult", "KeyValue", "EngineResults", "AnswerSet", "Answer", "Translations"]
import abc
@@ -21,6 +21,7 @@ from searx import enginelib
from ._base import Result, MainResult, LegacyResult
from .answer import AnswerSet, Answer, Translations
+from .keyvalue import KeyValue
class ResultList(list, abc.ABC):
@@ -30,6 +31,7 @@ class ResultList(list, abc.ABC):
"""The collection of result types (which have already been implemented)."""
Answer = Answer
+ KeyValue = KeyValue
MainResult = MainResult
Result = Result
Translations = Translations
diff --git a/searx/result_types/keyvalue.py b/searx/result_types/keyvalue.py
new file mode 100644
index 000000000..12efccc4b
--- /dev/null
+++ b/searx/result_types/keyvalue.py
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+Typification of the *keyvalue* results. Results of this type are rendered in
+the :origin:`keyvalue.html <searx/templates/simple/result_templates/keyvalue.html>`
+template.
+
+----
+
+.. autoclass:: KeyValue
+ :members:
+ :show-inheritance:
+
+"""
+# pylint: disable=too-few-public-methods
+
+from __future__ import annotations
+
+__all__ = ["KeyValue"]
+
+import typing
+from collections import OrderedDict
+
+from ._base import MainResult
+
+
+class KeyValue(MainResult, kw_only=True):
+ """Simple table view which maps *key* names (first col) to *values*
+ (second col)."""
+
+ template: str = "keyvalue.html"
+
+ kvmap: dict[str, typing.Any] | OrderedDict[str, typing.Any]
+ """Dictionary with keys and values. To sort keys, use :py:obj:`OrderedDict`."""
+
+ caption: str = ""
+ """Optional caption for this result."""
+
+ key_title: str = ""
+ """Optional title for the *key column*."""
+
+ value_title: str = ""
+ """Optional title for the *value column*."""
+
+ def __hash__(self) -> int:
+ """The KeyValues objects are checked for object identity, even if all
+ fields of two results have the same values, they are different from each
+ other.
+ """
+ return id(self)