diff options
| author | Markus Heiser <markus.heiser@darmarit.de> | 2025-09-10 16:10:42 +0200 |
|---|---|---|
| committer | Markus Heiser <markus.heiser@darmarIT.de> | 2025-09-20 10:56:46 +0200 |
| commit | 7eedd44f5f9965cf2fbff14d276f96944b5c6a98 (patch) | |
| tree | af9e32c177fb8de237b605b1fc4160157707c862 /searx/result_types | |
| parent | 57ef342ad11eae84629b9c1e889d2b9aa212efeb (diff) | |
[mod] typification of SearXNG: add new result type Paper
This patch adds a new result type: Paper
- Python class: searx/result_types/paper.py
- Jinja template: searx/templates/simple/result_templates/paper.html
- CSS (less) client/simple/src/less/result_types/paper.less
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx/result_types')
| -rw-r--r-- | searx/result_types/__init__.py | 3 | ||||
| -rw-r--r-- | searx/result_types/_base.py | 6 | ||||
| -rw-r--r-- | searx/result_types/paper.py | 96 |
3 files changed, 104 insertions, 1 deletions
diff --git a/searx/result_types/__init__.py b/searx/result_types/__init__.py index c8b8eb4f4..a1976c10f 100644 --- a/searx/result_types/__init__.py +++ b/searx/result_types/__init__.py @@ -22,6 +22,7 @@ __all__ = [ "Translations", "WeatherAnswer", "Code", + "Paper", ] import typing as t @@ -31,6 +32,7 @@ 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 class ResultList(list[Result | LegacyResult], abc.ABC): @@ -44,6 +46,7 @@ class ResultList(list[Result | LegacyResult], abc.ABC): Answer = Answer KeyValue = KeyValue Code = Code + Paper = Paper MainResult = MainResult Result = Result Translations = Translations diff --git a/searx/result_types/_base.py b/searx/result_types/_base.py index 1c614651b..b3f2afdeb 100644 --- a/searx/result_types/_base.py +++ b/searx/result_types/_base.py @@ -362,7 +362,11 @@ class MainResult(Result): # pylint: disable=missing-class-docstring """The date on which the object was published.""" pubdate: str = "" - """String representation of :py:obj:`MainResult.publishedDate`""" + """String representation of :py:obj:`MainResult.publishedDate` + + Deprecated: it is still partially used in the templates, but will one day be + completely eliminated. + """ length: time.struct_time | None = None """Playing duration in seconds.""" diff --git a/searx/result_types/paper.py b/searx/result_types/paper.py new file mode 100644 index 000000000..33bb5f99a --- /dev/null +++ b/searx/result_types/paper.py @@ -0,0 +1,96 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Typification of the *paper* results. + +.. _BibTeX field types: https://en.wikipedia.org/wiki/BibTeX#Field_types +.. _BibTeX format: https://www.bibtex.com/g/bibtex-format/ + +Results of this type are rendered in the :origin:`paper.html +<searx/templates/simple/result_templates/paper.html>` template. + +Related topics: + +- `BibTeX field types`_ +- `BibTeX format`_ + +---- + +.. autoclass:: Paper + :members: + :show-inheritance: + +""" +# pylint: disable=too-few-public-methods, disable=invalid-name + +from __future__ import annotations + +__all__ = ["Paper"] + +import typing as t + +from searx.weather import DateTime +from ._base import MainResult + + +@t.final +class Paper(MainResult, kw_only=True): + """Result type suitable for displaying scientific papers and other + documents.""" + + template: str = "paper.html" + + date_of_publication: DateTime | None = None + """Date the document was published.""" + + content: str = "" + """An abstract or excerpt from the document.""" + + comments: str = "" + """Free text display in italic below the content.""" + + tags: list[str] = [] + """Free tag list.""" + + type: str = "" + """Short description of medium type, e.g. *book*, *pdf* or *html* ...""" + + authors: list[str] | set[str] = [] + """List of authors of the work (authors with a "s" suffix, the "author" is + in the :py:obj:`MainResult.author`).""" + + editor: str = "" + """Editor of the book/paper.""" + + publisher: str = "" + """Name of the publisher.""" + + journal: str = "" + """Name of the journal or magazine the article was published in.""" + + volume: str | int = "" + """Volume number.""" + + pages: str = "" + """Page range where the article is.""" + + number: str = "" + """Number of the report or the issue number for a journal article.""" + + doi: str = "" + """DOI number (like ``10.1038/d41586-018-07848-2``).""" + + issn: list[str] = [] + """List of ISSN numbers like ``1476-4687``""" + + isbn: list[str] = [] + """List of ISBN numbers like ``9780201896831``""" + + pdf_url: str = "" + """URL to the full article, the PDF version""" + + html_url: str = "" + """URL to full article, HTML version""" + + def __post_init__(self): + super().__post_init__() + if self.date_of_publication is None and self.publishedDate is not None: + self.date_of_publication = DateTime(self.publishedDate) |