@@ -0,0 +1,46 @@
1+from os import listdir
2+from os.path import realpath, dirname, join, isdir
3+from searx.utils import load_module
4+from collections import defaultdict
5+
6+
7+answerers_dir = dirname(realpath(__file__))
8+
9+
10+def load_answerers():
11+ answerers = []
12+ for filename in listdir(answerers_dir):
13+ if not isdir(join(answerers_dir, filename)):
14+ continue
15+ module = load_module('answerer.py', join(answerers_dir, filename))
16+ if not hasattr(module, 'keywords') or not isinstance(module.keywords, tuple) or not len(module.keywords):
17+ exit(2)
18+ answerers.append(module)
19+ return answerers
20+
21+
22+def get_answerers_by_keywords(answerers):
23+ by_keyword = defaultdict(list)
24+ for answerer in answerers:
25+ for keyword in answerer.keywords:
26+ for keyword in answerer.keywords:
27+ by_keyword[keyword].append(answerer.answer)
28+ return by_keyword
29+
30+
31+def ask(query):
32+ results = []
33+ query_parts = filter(None, query.query.split())
34+
35+ if query_parts[0] not in answerers_by_keywords:
36+ return results
37+
38+ for answerer in answerers_by_keywords[query_parts[0]]:
39+ result = answerer(query)
40+ if result:
41+ results.append(result)
42+ return results
43+
44+
45+answerers = load_answerers()
46+answerers_by_keywords = get_answerers_by_keywords(answerers)