diff options
| author | asciimoo <asciimoo@gmail.com> | 2013-10-14 23:09:13 +0200 |
|---|---|---|
| committer | asciimoo <asciimoo@gmail.com> | 2013-10-14 23:09:13 +0200 |
| commit | ae9fb1d7dccf061032b5d4b167086838feb1463d (patch) | |
| tree | 76cc836e07f9e14fd9f661660ea96bafcf92fa9c /searx/webapp.py | |
[enh] initial commit
Diffstat (limited to 'searx/webapp.py')
| -rw-r--r-- | searx/webapp.py | 69 |
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')) + ) |