@@ -0,0 +1,69 @@
1+#!/usr/bin/env python
2+
3+if __name__ == "__main__":
4+ from sys import path
5+ from os.path import realpath, dirname
6+ path.append(realpath(dirname(realpath(__file__))+'/../'))
7+
8+from flask import Flask, request, flash, render_template
9+import ConfigParser
10+from os import getenv
11+from searx.engines import engines
12+import grequests
13+
14+cfg = ConfigParser.SafeConfigParser()
15+cfg.read('/etc/searx.conf')
16+cfg.read(getenv('HOME')+'/.searxrc')
17+cfg.read(getenv('HOME')+'/.config/searx/searx.conf')
18+cfg.read('searx.conf')
19+
20+
21+app = Flask(__name__)
22+app.secret_key = cfg.get('app', 'secret_key')
23+
24+def default_request_params():
25+ return {'method': 'GET', 'headers': {}, 'data': {}, 'url': ''}
26+
27+def make_callback(results, callback):
28+ def process_callback(response, **kwargs):
29+ results.extend(callback(response))
30+ return process_callback
31+
32+@app.route('/', methods=['GET', 'POST'])
33+def index():
34+ if request.method=='POST':
35+ if not request.form.get('q'):
36+ flash('Wrong post data')
37+ return render_template('index.html')
38+ query = request.form['q']
39+ requests = []
40+ results = []
41+ for engine in engines:
42+ request_params = engine.request(query, default_request_params())
43+ callback = make_callback(results, engine.response)
44+ if request_params['method'] == 'GET':
45+ req = grequests.get(request_params['url']
46+ ,headers=request_params['headers']
47+ ,hooks=dict(response=callback)
48+ )
49+ else:
50+ req = grequests.post(request_params['url']
51+ ,data=request_params['data']
52+ ,headers=request_params['headers']
53+ ,hooks=dict(response=callback)
54+ )
55+ requests.append(req)
56+ grequests.map(requests)
57+ return render_template('results.html', results=results)
58+
59+
60+ return render_template('index.html')
61+
62+if __name__ == "__main__":
63+ from gevent import monkey
64+ monkey.patch_all()
65+
66+ app.run(debug = cfg.get('server', 'debug')
67+ ,use_debugger = cfg.get('server', 'debug')
68+ ,port = int(cfg.get('server', 'port'))
69+ )