diff options
Diffstat (limited to 'searx/engines/__init__.py')
| -rw-r--r-- | searx/engines/__init__.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index 1fc01600a..8d49bae8a 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -13,6 +13,7 @@ usage:: import sys import copy +import itertools from os.path import realpath, dirname from babel.localedata import locale_identifiers @@ -260,3 +261,26 @@ def load_engines(engine_list): if engine: register_engine(engine) return engines + + +DEFAULT_GROUP_NAME = 'others' + + +def group_engines_in_tab(engines): # pylint: disable=redefined-outer-name + 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']] + 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, + ) + ] |