Commit graph

5282 commits

Author SHA1 Message Date
Markus Heiser
e4e7d73e8e [refactor] typification of SearXNG (initial) / result items (part 1)
Typification of SearXNG
=======================

This patch introduces the typing of the results.  The why and how is described
in the documentation, please generate the documentation ..

    $ make docs.clean docs.live

and read the following articles in the "Developer documentation":

- result types --> http://0.0.0.0:8000/dev/result_types/index.html

The result types are available from the `searx.result_types` module.  The
following have been implemented so far:

- base result type: `searx.result_type.Result`
  --> http://0.0.0.0:8000/dev/result_types/base_result.html

- answer results
  --> http://0.0.0.0:8000/dev/result_types/answer.html

including the type for translations (inspired by #3925).  For all other
types (which still need to be set up in subsequent PRs), template documentation
has been created for the transition period.

Doc of the fields used in Templates
===================================

The template documentation is the basis for the typing and is the first complete
documentation of the results (needed for engine development).  It is the
"working paper" (the plan) with which further typifications can be implemented
in subsequent PRs.

- https://github.com/searxng/searxng/issues/357

Answer Templates
================

With the new (sub) types for `Answer`, the templates for the answers have also
been revised, `Translation` are now displayed with collapsible entries (inspired
by #3925).

    !en-de dog

Plugins & Answerer
==================

The implementation for `Plugin` and `Answer` has been revised, see
documentation:

- Plugin: http://0.0.0.0:8000/dev/plugins/index.html
- Answerer: http://0.0.0.0:8000/dev/answerers/index.html

With `AnswerStorage` and `AnswerStorage` to manage those items (in follow up
PRs, `ArticleStorage`, `InfoStorage` and .. will be implemented)

Autocomplete
============

The autocompletion had a bug where the results from `Answer` had not been shown
in the past.  To test activate autocompletion and try search terms for which we
have answerers

- statistics: type `min 1 2 3` .. in the completion list you should find an
  entry like `[de] min(1, 2, 3) = 1`

- random: type `random uuid` .. in the completion list, the first item is a
  random UUID

Extended Types
==============

SearXNG extends e.g. the request and response types of flask and httpx, a module
has been set up for type extensions:

- Extended Types
  --> http://0.0.0.0:8000/dev/extended_types.html

Unit-Tests
==========

The unit tests have been completely revised.  In the previous implementation,
the runtime (the global variables such as `searx.settings`) was not initialized
before each test, so the runtime environment with which a test ran was always
determined by the tests that ran before it.  This was also the reason why we
sometimes had to observe non-deterministic errors in the tests in the past:

- https://github.com/searxng/searxng/issues/2988 is one example for the Runtime
  issues, with non-deterministic behavior ..

- https://github.com/searxng/searxng/pull/3650
- https://github.com/searxng/searxng/pull/3654
- https://github.com/searxng/searxng/pull/3642#issuecomment-2226884469
- https://github.com/searxng/searxng/pull/3746#issuecomment-2300965005

Why msgspec.Struct
==================

We have already discussed typing based on e.g. `TypeDict` or `dataclass` in the past:

- https://github.com/searxng/searxng/pull/1562/files
- https://gist.github.com/dalf/972eb05e7a9bee161487132a7de244d2
- https://github.com/searxng/searxng/pull/1412/files
- https://github.com/searxng/searxng/pull/1356

In my opinion, TypeDict is unsuitable because the objects are still dictionaries
and not instances of classes / the `dataclass` are classes but ...

The `msgspec.Struct` combine the advantages of typing, runtime behaviour and
also offer the option of (fast) serializing (incl. type check) the objects.

Currently not possible but conceivable with `msgspec`: Outsourcing the engines
into separate processes, what possibilities this opens up in the future is left
to the imagination!

Internally, we have already defined that it is desirable to decouple the
development of the engines from the development of the SearXNG core / The
serialization of the `Result` objects is a prerequisite for this.

HINT: The threads listed above were the template for this PR, even though the
implementation here is based on msgspec.  They should also be an inspiration for
the following PRs of typification, as the models and implementations can provide
a good direction.

Why just one commit?
====================

I tried to create several (thematically separated) commits, but gave up at some
point ... there are too many things to tackle at once / The comprehensibility of
the commits would not be improved by a thematic separation. On the contrary, we
would have to make multiple changes at the same places and the goal of a change
would be vaguely recognizable in the fog of the commits.

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-14 12:17:58 +01:00
Bnyro
f29b2b113a [refactor] translation engines: common interface 2025-01-14 11:57:34 +01:00
Markus Heiser
09cce18518 [data] update searx.data - make data.all
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-13 08:02:01 +01:00
searxng-bot
94a0b415ef [l10n] update translations from Weblate
8f8f92dc0 - 2025-01-10 - hirushaadi <hirushaadi@users.noreply.translate.codeberg.org>
d4ae2e4ba - 2025-01-08 - Harshith-10 <harshith-10@users.noreply.translate.codeberg.org>
05848d0bb - 2025-01-08 - return42 <return42@users.noreply.translate.codeberg.org>
151cde7fc - 2025-01-08 - return42 <return42@users.noreply.translate.codeberg.org>
43ba79c99 - 2025-01-06 - return42 <return42@users.noreply.translate.codeberg.org>
2025-01-10 08:13:22 +01:00
Markus Heiser
6dab7fe78b Revert "[l10n ga] trigger weblate.push.translations (another try)"
This reverts commit e352926187.
2025-01-06 17:12:16 +01:00
Markus Heiser
e352926187 [l10n ga] trigger weblate.push.translations (another try)
Related:

- https://github.com/searxng/searxng/issues/4117

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 16:59:20 +01:00
Markus Heiser
b0391fe718 reomve DUMMY from searxng.msg catalog
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 16:24:44 +01:00
Markus Heiser
91d3d38690 [l10n ga] trigger weblate.push.translations
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 16:16:04 +01:00
Markus Heiser
c5991865c8 [fix] l10n ga (Irish) messages.po is marked as fuzzy
$ ./manage pyenv.cmd pybabel compile --statistics -d searx/translations/

reports:

    catalog searx/translations/ga/LC_MESSAGES/messages.po is marked as fuzzy, skipping

This commit removes the ``fuzzy`` tag and BTW reverts commit 655e41f27

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 15:49:21 +01:00
Markus Heiser
655e41f274 [l10n ga] trigger weblate.push.translations
Related:

- https://github.com/searxng/searxng/issues/4117

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 14:54:41 +01:00
Aindriú Mac Giolla Eoin
d9343b6388 [l10n] adding new language Irish (ga) 2025-01-06 14:54:41 +01:00
Bnyro
0642c5434a [fix] dockerhub: switch to new api path
Co-authored-by: Markus Heiser <markus.heiser@darmarit.de>
2025-01-06 13:46:13 +01:00
Lucki
18c3e08837 Fix usage of api_key engine setting
The value of `params['api_key']` isn't read anywhere.
Writing directly into the header object solves this quite easily though.

> [Users can authenticate by including their API key either in a request URL by appending `?apikey=<API KEY>`, or by including the `X-API-Key: <API KEY>` header with the request.](https://wallhaven.cc/help/api)
2025-01-06 12:25:33 +01:00
searxng-bot
a060c09854 [l10n] update translations from Weblate
3db237112 - 2024-12-31 - kratos <kratos@users.noreply.translate.codeberg.org>
2025-01-03 08:49:25 +01:00
Markus Heiser
c1bb0bebd4 [data] update searx.data - update_engine_traits.py
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-29 10:12:45 +01:00
Markus Heiser
af3f272b0b [fix] update_engine_traits.py: annas archive, bing-* and zlibrary engines
Github action Update data - update_engine_traits [1] had issues in annas
archive, bing-* and zlibrary engines:

    ./manage pyenv.cmd python ./searxng_extra/update/update_engine_traits.py

[1] https://github.com/searxng/searxng/actions/runs/12530827768/job/34953392587

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-29 10:12:45 +01:00
return42
05c82d3201 [data] update searx.data - update_engine_descriptions.py 2024-12-29 10:12:24 +01:00
return42
f0e9c3be8c [data] update searx.data - update_currencies.py 2024-12-29 10:11:38 +01:00
return42
428eaea2b7 [data] update searx.data - update_wikidata_units.py 2024-12-29 10:11:09 +01:00
return42
3d55008f23 [data] update searx.data - update_ahmia_blacklist.py 2024-12-29 10:10:38 +01:00
searxng-bot
402a09963e [l10n] update translations from Weblate
31b458aa4 - 2024-12-25 - return42 <return42@users.noreply.translate.codeberg.org>
fe7cc8706 - 2024-12-25 - return42 <return42@users.noreply.translate.codeberg.org>
7a585b545 - 2024-12-22 - alexgabi <alexgabi@users.noreply.translate.codeberg.org>
2e2fdbd16 - 2024-12-21 - xawos <xawos@users.noreply.translate.codeberg.org>
e2774bb44 - 2024-12-21 - ghose <ghose@users.noreply.translate.codeberg.org>
970bd5d86 - 2024-12-21 - xawos <xawos@users.noreply.translate.codeberg.org>
4c775384c - 2024-12-21 - xawos <xawos@users.noreply.translate.codeberg.org>
176f7df6e - 2024-12-21 - xawos <xawos@users.noreply.translate.codeberg.org>
a6a842d01 - 2024-12-20 - Amirkhandrend-Nicest-XII <Amirkhandrend-Nicest-XII@users.noreply.translate.codeberg.org>
2024-12-28 09:04:50 +01:00
Austin-Olacsi
73e395c8ce
[feat] engines: re-add alexandria.org 2024-12-25 13:13:18 +01:00
Markus Heiser
26097f444b [fix] engine google_video: google changed the layout of the HTML response
Closes: https://github.com/searxng/searxng/issues/4127
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-22 11:45:46 +01:00
searxng-bot
ce53d97327 [l10n] update translations from Weblate
979094524 - 2024-12-17 - Amirkhandrend-Nicest-XII <Amirkhandrend-Nicest-XII@users.noreply.translate.codeberg.org>
2024-12-20 08:16:12 +01:00
Markus Heiser
65c970bdf4 [build] /static 2024-12-16 11:39:38 +01:00
Bnyro
d4e3a5f2f2 [refactor] webapp.py: reuse get_client_settings() method to unify preference handling before render 2024-12-16 11:39:38 +01:00
Markus Heiser
1604a00b89 Revert "[weblate] add dummy string to trigger weblate.push.translations in CI"
This reverts commit 899edee5ec.
2024-12-16 09:27:19 +01:00
Markus Heiser
899edee5ec [weblate] add dummy string to trigger weblate.push.translations in CI
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-16 08:41:57 +01:00
Bnyro
523df1d7f4 [build] /static 2024-12-16 08:36:48 +01:00
Bnyro
c8e932647b [fix] settings: javascript crash when entering due to missing search form 2024-12-16 08:36:48 +01:00
Zhijie He
8d2c01e4ce [chore] cleanup 2024-12-16 08:32:35 +01:00
Zhijie He
12c27f416f [enh] add engine- prefix, replace blank space to - 2024-12-16 08:32:35 +01:00
Zhijie He
e90fa48018 [fix]: fix engine name may break some css style, contains "right", "left", "center" 2024-12-16 08:32:35 +01:00
Markus Heiser
c60fe999cf Update data - locales
./searxng_extra/update/update_locales.py

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-13 18:45:14 +01:00
Markus Heiser
f952668fde [l10n] adding new language Tatar (tt)
$ ./manage pyenv.cmd bash
    $ pybabel init -i searx/translations/messages.pot -d searx/translations -l tt
    creating catalog searx/translations/tt/LC_MESSAGES/messages.po based on searx/translations/messages.pot

Closes: https://github.com/searxng/searxng/issues/4098

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-13 18:45:14 +01:00
searxng-bot
8791345869 [l10n] update translations from Weblate
941da8a11 - 2024-12-13 - Kita Ikuyo <searinminecraft@courvix.com>
7c9e8973a - 2024-12-12 - return42 <return42@users.noreply.translate.codeberg.org>
1ef3f3b6e - 2024-12-12 - OpenCode <OpenCode@users.noreply.translate.codeberg.org>
8edb4af3d - 2024-12-11 - KhietVo <KhietVo@users.noreply.translate.codeberg.org>
77469663d - 2024-12-11 - dansmachina <dansmachina@users.noreply.translate.codeberg.org>
be726d2c7 - 2024-12-09 - kkrawczyk <kkrawczyk@users.noreply.translate.codeberg.org>
dfb9dd20f - 2024-12-10 - artnay <artnay@users.noreply.translate.codeberg.org>
a1977736f - 2024-12-09 - return42 <return42@users.noreply.translate.codeberg.org>
e17d999d7 - 2024-12-07 - Eryk Michalak <gnu.ewm@protonmail.com>
2024-12-13 08:15:55 +01:00
Markus Heiser
0245e82bd2 [build] /static 2024-12-01 15:04:05 +01:00
Markus Heiser
8c3f0c3d52 [fix] if image load fails on client side, show default image
BTW: change icon color from red to gray

Closes:

- https://github.com/searxng/searxng/issues/4066

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-12-01 15:04:05 +01:00
Bnyro
4a8d333d5b [build] /static 2024-12-01 13:08:50 +01:00
Bnyro
a7537a6935 [feat] search: add url formatting preference 2024-12-01 13:08:50 +01:00
Bnyro
cae07b9bf8 [build] /static 2024-11-29 20:24:06 +01:00
Bnyro
365c4d0643 [chore] search.js: remove leftovers from shift to multiselect categories PR 2024-11-29 20:24:06 +01:00
Allen
6948689d2a [enh] use longest title and test get_ordered_results() 2024-11-29 15:26:03 +01:00
Bnyro
94aafc83a6 [build] /static 2024-11-29 15:05:00 +01:00
Bnyro
6a9b97cad2 [feat] search: shift/ctrl click a category to select multiple categories 2024-11-29 15:05:00 +01:00
return42
6ca89e1319 [data] update searx.data - update_engine_traits.py 2024-11-29 14:57:06 +01:00
Markus Heiser
605f38b352 [fix] update_currencies.py: github CI has longer timeouts
Github action Update data - update_currencies [1]:

    ./manage pyenv.cmd python ./searxng_extra/update/update_currencies.py

fails with ``httpcore.ReadTimeout`` / the default timeout is 3sec.

[1] https://github.com/searxng/searxng/actions/runs/12076864366/job/33703464399

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-11-29 14:50:17 +01:00
searxng-bot
2717ffd094 [l10n] update translations from Weblate
ba1cebf8b - 2024-11-25 - saledai <saledai@users.noreply.translate.codeberg.org>
25da337e5 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
8379976e0 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
fa080d132 - 2024-11-26 - ghose <ghose@users.noreply.translate.codeberg.org>
42ac0f2d2 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
bb9c1d4b3 - 2024-11-25 - Outbreak2096 <Outbreak2096@users.noreply.translate.codeberg.org>
768be588f - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
13a63779a - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
649d5494b - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
7ce063699 - 2024-11-25 - saledai <saledai@users.noreply.translate.codeberg.org>
6f4ed2d9d - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
02a34ef99 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
de3ab1d94 - 2024-11-25 - AndersNordh <AndersNordh@users.noreply.translate.codeberg.org>
d18f56fa1 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
dff38e041 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
2e5c6694e - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
c9e9e0864 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
c625e848c - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
84a87ab05 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
28ebc3a97 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
b340f5ea8 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
e5fdd25ad - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
cf6b35d0a - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
da0ec01bc - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
7ca3c3051 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
adffd7987 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
d5c101710 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
f862cf05a - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
e7f4c00a8 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
2a25e9a1b - 2024-11-25 - Linerly <Linerly@users.noreply.translate.codeberg.org>
8cd81e701 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
80726a79a - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
ab7a56a81 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
ed44ff721 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
3b2b40d69 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
51926fb18 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
e823c2915 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
57b884908 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
525fcc395 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
fe2bf7267 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
d21ac5278 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
d18e3376b - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
a638f5ad5 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
c94c9b313 - 2024-11-25 - AndersNordh <AndersNordh@users.noreply.translate.codeberg.org>
aaa801da2 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
3b4961df8 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
6698f2069 - 2024-11-24 - return42 <return42@users.noreply.translate.codeberg.org>
73a117384 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
054d5cba4 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
1d3f21946 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
92ded48b1 - 2024-11-25 - return42 <return42@users.noreply.translate.codeberg.org>
d84b77ff9 - 2024-11-24 - SomeTr <SomeTr@users.noreply.translate.codeberg.org>
2ece96ac9 - 2024-11-24 - Priit Jõerüüt <jrtcdbrg@users.noreply.translate.codeberg.org>
2024-11-29 14:23:56 +01:00
Markus Heiser
540323a4b0 [mod] hardening xpath engine: ignore empty results
A SearXNG maintainer on Matrix reported a traceback::

    File "searxng-src/searx/engines/xpath.py", line 272, in response
      dom = html.fromstring(resp.text)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "searx-pyenv/lib/python3.11/site-packages/lxml/html/__init__.py", line 850, in fromstring
      doc = document_fromstring(html, parser=parser, base_url=base_url, **kw)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "searx-pyenv/lib/python3.11/site-packages/lxml/html/__init__.py", line 738, in document_fromstring
      raise etree.ParserError(
    lxml.etree.ParserError: Document is empty

I don't have an example to reproduce the issue, but the issue and this patch are
clearly recognizable even without an example.

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-11-29 14:20:31 +01:00
return42
32260a2738 [data] update searx.data - update_wikidata_units.py 2024-11-29 08:01:13 +01:00