diff options
author | Markus Heiser <markus.heiser@darmarit.de> | 2021-10-06 18:02:29 +0200 |
---|---|---|
committer | Markus Heiser <markus.heiser@darmarit.de> | 2021-10-07 08:45:02 +0200 |
commit | 19e41c137e7785ff5e4e99d04565792eba0a8a13 (patch) | |
tree | 94e919e34cfcac07961d1c79c69a976a38ff6da5 /searx/engines/__init__.py | |
parent | feb2d4dda575eb1501fb5a8427de364bed7bc179 (diff) | |
download | searxng-19e41c137e7785ff5e4e99d04565792eba0a8a13.tar.gz searxng-19e41c137e7785ff5e4e99d04565792eba0a8a13.zip |
[mod] set 'engine.supported_languages' from the origin python module
The key of the dictionary 'searx.data.ENGINES_LANGUAGES' is the *engine name*
configured in settings.xml. When multiple engines are configured to use the
same origin engine (e.g. `engine: google`)::
- name: google
engine: google
use_mobile_ui: false
...
- name: google italian
engine: google
use_mobile_ui: false
language: it
...
- name: google mobile ui
engine: google
shortcut: gomui
use_mobile_ui: true
There exists no entry for ENGINES_LANGUAGES[engine.name] (e.g. `name: google
mobile ui` or `name: google italian`). This issue can be solved by recreate the
ENGINES_LANGUAGES::
make data.languages
But this is nothing an SearXNG admin would like to do when just configuring
additional engines, since this just doubles entries in ENGINES_LANGUAGES and
BTW: `make data.languages` has various external requirements which might be not
installed or not available, on a production host.
With this patch, if engine.name fails, ENGINES_LANGUAGES[engine.engine] is used
to get the engine.supported_languages (e.g. `google` for the engine named
`google mobile`).
For an engine, when there is `language: ...` in the YAML settings, the engine
supports only one language, in this case engine.supported_languages should
contains this value defined in settings.yml (e.g. `it` for the engine named
`google italian`).
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Closes: https://github.com/searxng/searxng/issues/384
Diffstat (limited to 'searx/engines/__init__.py')
-rw-r--r-- | searx/engines/__init__.py | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index e0b5796e4..44ea9a4bd 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -137,7 +137,7 @@ def update_engine_attributes(engine, engine_data): if isinstance(param_value, str): param_value = list(map(str.strip, param_value.split(','))) engine.categories = param_value - elif param_name != 'engine': + else: setattr(engine, param_name, param_value) # set default attributes @@ -147,11 +147,35 @@ def update_engine_attributes(engine, engine_data): def set_language_attributes(engine): - # pylint: disable=protected-access # assign supported languages from json file if engine.name in ENGINES_LANGUAGES: engine.supported_languages = ENGINES_LANGUAGES[engine.name] + elif engine.engine in ENGINES_LANGUAGES: + # The key of the dictionary ENGINES_LANGUAGES is the *engine name* + # configured in settings.xml. When multiple engines are configured in + # settings.yml to use the same origin engine (python module) these + # additional engines can use the languages from the origin engine. + # For this use the configured ``engine: ...`` from settings.yml + engine.supported_languages = ENGINES_LANGUAGES[engine.engine] + + if hasattr(engine, 'language'): + # For an engine, when there is `language: ...` in the YAML settings, the + # engine supports only one language, in this case + # engine.supported_languages should contains this value defined in + # settings.yml + if engine.language not in engine.supported_languages: + raise ValueError( + "settings.yml - engine: '%s' / language: '%s' not supported" % ( + engine.name, engine.language )) + + if isinstance(engine.supported_languages, dict): + engine.supported_languages = { + engine.language : engine.supported_languages[engine.language] + } + else: + engine.supported_languages = [engine.language] + # find custom aliases for non standard language codes for engine_lang in engine.supported_languages: iso_lang = match_language(engine_lang, BABEL_LANGS, fallback=None) @@ -172,6 +196,7 @@ def set_language_attributes(engine): 'Accept-Language': 'ja-JP,ja;q=0.8,en-US;q=0.5,en;q=0.3', # bing needs a non-English language } engine.fetch_supported_languages = ( + # pylint: disable=protected-access lambda: engine._fetch_supported_languages( get(engine.supported_languages_url, headers=headers)) ) |