summaryrefslogtreecommitdiff
path: root/searxng_extra
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarit.de>2026-05-12 15:16:52 +0200
committerMarkus Heiser <markus.heiser@darmarIT.de>2026-05-13 13:55:50 +0200
commit471f2b205f98bcc1ca776a38c8bff10449c460a0 (patch)
tree9a6788ee7635e56926a349cddfb78162c06f5b0f /searxng_extra
parent09829b1ccc07a797e6ac9a1cf2db58ba90b87ec0 (diff)
[feat] update_engine_traits.py: add option to update engines selective
Previously, `update_engine_traits.py` would fetch traits for all engines, which is very slow and by side-effect touches engine data that are unrelated to the engine you're currently working on. To be faster with developing `update_engine_traits.py` supports now engine arguments. To test, jump into the developer environment and run the script:: $ ./manage dev.env (dev.env)$ ./searxng_extra/update/update_engine_traits.py --help Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searxng_extra')
-rwxr-xr-xsearxng_extra/update/update_engine_traits.py45
1 files changed, 34 insertions, 11 deletions
diff --git a/searxng_extra/update/update_engine_traits.py b/searxng_extra/update/update_engine_traits.py
index fdeb5d17c..1e9af84a4 100755
--- a/searxng_extra/update/update_engine_traits.py
+++ b/searxng_extra/update/update_engine_traits.py
@@ -12,12 +12,15 @@ The script :origin:`searxng_extra/update/update_engine_traits.py` is called in
the :origin:`CI Update data ... <.github/workflows/data-update.yml>`
"""
-
# pylint: disable=invalid-name
+
+import typing as t
+
from unicodedata import lookup
from pathlib import Path
from pprint import pformat
import babel
+import typer
from searx import settings, searx_dir
from searx import network
@@ -75,23 +78,45 @@ lang2emoji = {
'he': '\U0001f1ee\U0001f1f1', # Hebrew
}
+app = typer.Typer()
+
+
+@app.command()
+def cli(engines: t.Annotated[list[str] | None, typer.Argument()] = None):
+ """Update ``data/engine_traits.json`` and ``languages.py``.
-def main():
+ Optionally, if arguments are provided via the command line, these are
+ interpreted as the names of the engines that should be updated. All other
+ engines will be left untouched.
+ """
- engines_cfg = []
+ all_eng_names: list[str] = [_["name"] for _ in settings["engines"]]
+ if engines:
+ unknown: list[str] = [_ for _ in engines if _ not in all_eng_names]
+ if unknown:
+ print(f"ERROR: unknown engines --> {', '.join(unknown)}")
+ raise typer.Exit(42)
+ engines_cfg: list[dict[str, t.Any]] = []
for eng_data in settings["engines"]:
- eng_data["inactive"] = False
- engines_cfg.append(eng_data)
+ if not engines or eng_data["name"] in engines:
+ eng_data["inactive"] = False
+ engines_cfg.append(eng_data)
load_engines(engines_cfg)
- # traits_map = EngineTraitsMap.from_data()
- traits_map = fetch_traits_map()
+ traits_map: EngineTraitsMap = fetch_traits_map()
+ if engines:
+ _map = EngineTraitsMap.from_data()
+ _map.update(traits_map)
+ traits_map = _map
+
+ print("write json file: %s" % traits_map.ENGINE_TRAITS_FILE)
+ traits_map.save_data()
sxng_tag_list = filter_locales(traits_map)
write_languages_file(sxng_tag_list)
-def fetch_traits_map():
+def fetch_traits_map() -> EngineTraitsMap:
"""Fetches supported languages for each engine and writes json file with those."""
network.set_timeout_for_thread(10.0)
@@ -100,8 +125,6 @@ def fetch_traits_map():
traits_map = EngineTraitsMap.fetch_traits(log=log)
print("fetched properties from %s engines" % len(traits_map))
- print("write json file: %s" % traits_map.ENGINE_TRAITS_FILE)
- traits_map.save_data()
return traits_map
@@ -203,4 +226,4 @@ def get_unicode_flag(locale: babel.Locale):
if __name__ == "__main__":
- main()
+ app()