diff options
author | Martin Fischer <martin@push-f.com> | 2022-01-03 07:24:20 +0100 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2022-01-05 11:03:44 +0100 |
commit | 1e195f5b95d4c59105249d66f5d170d40139a461 (patch) | |
tree | 5cb2b7a37d4f3fc95f986c262e4e38c40821d4b9 /searx/webutils.py | |
parent | 5d74bf382012c73c701e1a4969e0f420b099db9f (diff) | |
download | searxng-1e195f5b95d4c59105249d66f5d170d40139a461.tar.gz searxng-1e195f5b95d4c59105249d66f5d170d40139a461.zip |
[mod] move group_engines_in_tab to searx.webutils
Diffstat (limited to 'searx/webutils.py')
-rw-r--r-- | searx/webutils.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/searx/webutils.py b/searx/webutils.py index 068582858..4b4b0a965 100644 --- a/searx/webutils.py +++ b/searx/webutils.py @@ -5,11 +5,13 @@ import hashlib import hmac import re import inspect +import itertools from io import StringIO from codecs import getincrementalencoder -from searx import logger +from searx import logger, settings +from searx.engines import OTHER_CATEGORY VALID_LANGUAGE_CODE = re.compile(r'^[a-z]{2,3}(-[a-zA-Z]{2})?$') @@ -134,3 +136,26 @@ def is_flask_run_cmdline(): if len(frames) < 2: return False return frames[-2].filename.endswith('flask/cli.py') + + +DEFAULT_GROUP_NAME = 'others' + + +def group_engines_in_tab(engines): + def engine_sort_key(engine): + return (engine.about.get('language', ''), engine.name) + + def group_sort_key(group): + return (group[0] == DEFAULT_GROUP_NAME, group[0].lower()) + + def get_group(eng): + non_tab_engines = [c for c in eng.categories if c not in settings['categories_as_tabs'] + [OTHER_CATEGORY]] + return non_tab_engines[0] if len(non_tab_engines) > 0 else DEFAULT_GROUP_NAME + + return [ + (groupname, sorted(engines, key=engine_sort_key)) + for groupname, engines in sorted( + ((name, list(engines)) for name, engines in itertools.groupby(sorted(engines, key=get_group), get_group)), + key=group_sort_key, + ) + ] |