summaryrefslogtreecommitdiff
path: root/searx/engines/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/engines/__init__.py')
-rw-r--r--searx/engines/__init__.py24
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,
+ )
+ ]