summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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()