diff options
| author | Alexandre Flament <alex@al-f.net> | 2016-12-09 23:11:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-12-09 23:11:45 +0100 |
| commit | e48f07a367e55bf8aa881902b977bd7ce1cd2bb6 (patch) | |
| tree | 8b285b2dd483006d08c03b9fec49cba49ff16a87 /searx/answerers/__init__.py | |
| parent | 219f047bf359ce94397241b875639f3aaddb0fe5 (diff) | |
| parent | d80fb2c8e8995facb3a25c152c47a93eecf1fee4 (diff) | |
Merge branch 'master' into searchpy2
Diffstat (limited to 'searx/answerers/__init__.py')
| -rw-r--r-- | searx/answerers/__init__.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/searx/answerers/__init__.py b/searx/answerers/__init__.py new file mode 100644 index 000000000..8f5951c75 --- /dev/null +++ b/searx/answerers/__init__.py @@ -0,0 +1,46 @@ +from os import listdir +from os.path import realpath, dirname, join, isdir +from searx.utils import load_module +from collections import defaultdict + + +answerers_dir = dirname(realpath(__file__)) + + +def load_answerers(): + answerers = [] + for filename in listdir(answerers_dir): + if not isdir(join(answerers_dir, filename)): + continue + module = load_module('answerer.py', join(answerers_dir, filename)) + if not hasattr(module, 'keywords') or not isinstance(module.keywords, tuple) or not len(module.keywords): + exit(2) + answerers.append(module) + return answerers + + +def get_answerers_by_keywords(answerers): + by_keyword = defaultdict(list) + for answerer in answerers: + for keyword in answerer.keywords: + for keyword in answerer.keywords: + by_keyword[keyword].append(answerer.answer) + return by_keyword + + +def ask(query): + results = [] + query_parts = filter(None, query.query.split()) + + if query_parts[0] not in answerers_by_keywords: + return results + + for answerer in answerers_by_keywords[query_parts[0]]: + result = answerer(query) + if result: + results.append(result) + return results + + +answerers = load_answerers() +answerers_by_keywords = get_answerers_by_keywords(answerers) |