commit: 7eed8a5dd909ca70d45fdff5706bb207e6aa8bdf
parent: 971ed0abd159625bd01d0b3ca52c90b394711d77
Author: Adam Tauber <asciimoo@gmail.com>
Date: Sat, 19 Nov 2016 21:03:27 +0100
[enh] add statistics answerer
Diffstat:
1 file changed, 51 insertions(+), 0 deletions(-)
diff --git a/searx/answerers/statistics/answerer.py b/searx/answerers/statistics/answerer.py
@@ -0,0 +1,51 @@
+from functools import reduce
+from operator import mul
+
+from flask_babel import gettext
+
+keywords = ('min',
+ 'max',
+ 'avg',
+ 'sum',
+ 'prod')
+
+
+# required answerer function
+# can return a list of results (any result type) for a given query
+def answer(query):
+ parts = query.query.split()
+
+ if len(parts) < 2:
+ return []
+
+ try:
+ args = map(float, parts[1:])
+ except:
+ return []
+
+ func = parts[0]
+ answer = None
+
+ if func == 'min':
+ answer = min(args)
+ elif func == 'max':
+ answer = max(args)
+ elif func == 'avg':
+ answer = sum(args)/len(args)
+ elif func == 'sum':
+ answer = sum(args)
+ elif func == 'prod':
+ answer = reduce(mul, args, 1)
+
+ if answer is None:
+ return []
+
+ return [{'answer': unicode(answer)}]
+
+
+# required answerer function
+# returns information about the answerer
+def self_info():
+ return {'name': gettext('Statistics functions'),
+ 'description': gettext('Compute {functions} of the arguments').format(functions='/'.join(keywords)),
+ 'examples': ['avg 123 548 2.04 24.2']}