webapp.py 2.3 KB

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