mirror of
https://github.com/searxng/searxng.git
synced 2025-07-15 09:19:20 +02:00
[mod] replace engines_languages.json by engines_traits.json
Implementations of the *traits* of the engines. Engine's traits are fetched from the origin engine and stored in a JSON file in the *data folder*. Most often traits are languages and region codes and their mapping from SearXNG's representation to the representation in the origin search engine. To load traits from the persistence:: searx.enginelib.traits.EngineTraitsMap.from_data() For new traits new properties can be added to the class:: searx.enginelib.traits.EngineTraits .. hint:: Implementation is downward compatible to the deprecated *supported_languages method* from the vintage implementation. The vintage code is tagged as *deprecated* an can be removed when all engines has been ported to the *traits method*. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
parent
64fea2f9cb
commit
6e5f22e558
29 changed files with 5415 additions and 4593 deletions
|
@ -907,16 +907,11 @@ def autocompleter():
|
|||
# and there is a query part
|
||||
if len(raw_text_query.autocomplete_list) == 0 and len(sug_prefix) > 0:
|
||||
|
||||
# get language from cookie
|
||||
language = request.preferences.get_value('language')
|
||||
if not language or language == 'all':
|
||||
language = 'en'
|
||||
else:
|
||||
language = language.split('-')[0]
|
||||
# get SearXNG's locale and autocomplete backend from cookie
|
||||
sxng_locale = request.preferences.get_value('language')
|
||||
backend_name = request.preferences.get_value('autocomplete')
|
||||
|
||||
# run autocompletion
|
||||
raw_results = search_autocomplete(request.preferences.get_value('autocomplete'), sug_prefix, language)
|
||||
for result in raw_results:
|
||||
for result in search_autocomplete(backend_name, sug_prefix, sxng_locale):
|
||||
# attention: this loop will change raw_text_query object and this is
|
||||
# the reason why the sug_prefix was stored before (see above)
|
||||
if result != sug_prefix:
|
||||
|
@ -1001,7 +996,9 @@ def preferences():
|
|||
'rate80': rate80,
|
||||
'rate95': rate95,
|
||||
'warn_timeout': e.timeout > settings['outgoing']['request_timeout'],
|
||||
'supports_selected_language': _is_selected_language_supported(e, request.preferences),
|
||||
'supports_selected_language': e.traits.is_locale_supported(
|
||||
str(request.preferences.get_value('language') or 'all')
|
||||
),
|
||||
'result_count': result_count,
|
||||
}
|
||||
# end of stats
|
||||
|
@ -1052,7 +1049,9 @@ def preferences():
|
|||
# supports
|
||||
supports = {}
|
||||
for _, e in filtered_engines.items():
|
||||
supports_selected_language = _is_selected_language_supported(e, request.preferences)
|
||||
supports_selected_language = e.traits.is_locale_supported(
|
||||
str(request.preferences.get_value('language') or 'all')
|
||||
)
|
||||
safesearch = e.safesearch
|
||||
time_range_support = e.time_range_support
|
||||
for checker_test_name in checker_results.get(e.name, {}).get('errors', {}):
|
||||
|
@ -1099,16 +1098,6 @@ def preferences():
|
|||
)
|
||||
|
||||
|
||||
def _is_selected_language_supported(engine, preferences: Preferences): # pylint: disable=redefined-outer-name
|
||||
language = preferences.get_value('language')
|
||||
if language == 'all':
|
||||
return True
|
||||
x = match_language(
|
||||
language, getattr(engine, 'supported_languages', []), getattr(engine, 'language_aliases', {}), None
|
||||
)
|
||||
return bool(x)
|
||||
|
||||
|
||||
@app.route('/image_proxy', methods=['GET'])
|
||||
def image_proxy():
|
||||
# pylint: disable=too-many-return-statements, too-many-branches
|
||||
|
@ -1327,9 +1316,11 @@ def config():
|
|||
if not request.preferences.validate_token(engine):
|
||||
continue
|
||||
|
||||
supported_languages = engine.supported_languages
|
||||
if isinstance(engine.supported_languages, dict):
|
||||
supported_languages = list(engine.supported_languages.keys())
|
||||
_languages = engine.traits.languages.keys()
|
||||
if engine.traits.data_type == 'supported_languages': # vintage / deprecated
|
||||
_languages = engine.traits.supported_languages
|
||||
if isinstance(_languages, dict):
|
||||
_languages = _languages.keys()
|
||||
|
||||
_engines.append(
|
||||
{
|
||||
|
@ -1339,7 +1330,8 @@ def config():
|
|||
'enabled': not engine.disabled,
|
||||
'paging': engine.paging,
|
||||
'language_support': engine.language_support,
|
||||
'supported_languages': supported_languages,
|
||||
'languages': list(_languages),
|
||||
'regions': list(engine.traits.regions.keys()),
|
||||
'safesearch': engine.safesearch,
|
||||
'time_range_support': engine.time_range_support,
|
||||
'timeout': engine.timeout,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue