summaryrefslogtreecommitdiff
path: root/searx/webapp.py
diff options
context:
space:
mode:
authorasciimoo <asciimoo@gmail.com>2013-10-14 23:09:13 +0200
committerasciimoo <asciimoo@gmail.com>2013-10-14 23:09:13 +0200
commitae9fb1d7dccf061032b5d4b167086838feb1463d (patch)
tree76cc836e07f9e14fd9f661660ea96bafcf92fa9c /searx/webapp.py
[enh] initial commit
Diffstat (limited to 'searx/webapp.py')
-rw-r--r--searx/webapp.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/searx/webapp.py b/searx/webapp.py
new file mode 100644
index 000000000..7c859d5d4
--- /dev/null
+++ b/searx/webapp.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+if __name__ == "__main__":
+ from sys import path
+ from os.path import realpath, dirname
+ path.append(realpath(dirname(realpath(__file__))+'/../'))
+
+from flask import Flask, request, flash, render_template
+import ConfigParser
+from os import getenv
+from searx.engines import engines
+import grequests
+
+cfg = ConfigParser.SafeConfigParser()
+cfg.read('/etc/searx.conf')
+cfg.read(getenv('HOME')+'/.searxrc')
+cfg.read(getenv('HOME')+'/.config/searx/searx.conf')
+cfg.read('searx.conf')
+
+
+app = Flask(__name__)
+app.secret_key = cfg.get('app', 'secret_key')
+
+def default_request_params():
+ return {'method': 'GET', 'headers': {}, 'data': {}, 'url': ''}
+
+def make_callback(results, callback):
+ def process_callback(response, **kwargs):
+ results.extend(callback(response))
+ return process_callback
+
+@app.route('/', methods=['GET', 'POST'])
+def index():
+ if request.method=='POST':
+ if not request.form.get('q'):
+ flash('Wrong post data')
+ return render_template('index.html')
+ query = request.form['q']
+ requests = []
+ results = []
+ for engine in engines:
+ request_params = engine.request(query, default_request_params())
+ callback = make_callback(results, engine.response)
+ if request_params['method'] == 'GET':
+ req = grequests.get(request_params['url']
+ ,headers=request_params['headers']
+ ,hooks=dict(response=callback)
+ )
+ else:
+ req = grequests.post(request_params['url']
+ ,data=request_params['data']
+ ,headers=request_params['headers']
+ ,hooks=dict(response=callback)
+ )
+ requests.append(req)
+ grequests.map(requests)
+ return render_template('results.html', results=results)
+
+
+ return render_template('index.html')
+
+if __name__ == "__main__":
+ from gevent import monkey
+ monkey.patch_all()
+
+ app.run(debug = cfg.get('server', 'debug')
+ ,use_debugger = cfg.get('server', 'debug')
+ ,port = int(cfg.get('server', 'port'))
+ )