|
@@ -25,7 +25,7 @@ if __name__ == "__main__":
|
25
|
25
|
from flask import Flask, request, flash, render_template, url_for, Response
|
26
|
26
|
import ConfigParser
|
27
|
27
|
from os import getenv
|
28
|
|
-from searx.engines import search, engines
|
|
28
|
+from searx.engines import search, categories
|
29
|
29
|
import json
|
30
|
30
|
|
31
|
31
|
cfg = ConfigParser.SafeConfigParser()
|
|
@@ -51,27 +51,36 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
|
51
|
51
|
'''
|
52
|
52
|
|
53
|
53
|
def render(template_name, **kwargs):
|
54
|
|
- kwargs['engines'] = engines.keys()
|
|
54
|
+ global categories
|
|
55
|
+ kwargs['categories'] = categories.keys()
|
|
56
|
+ if not 'selected_categories' in kwargs:
|
|
57
|
+ kwargs['selected_categories'] = ['general']
|
55
|
58
|
return render_template(template_name, **kwargs)
|
56
|
59
|
|
57
|
60
|
@app.route('/', methods=['GET', 'POST'])
|
58
|
61
|
def index():
|
|
62
|
+ global categories
|
59
|
63
|
if request.method=='POST':
|
60
|
64
|
if not request.form.get('q'):
|
61
|
65
|
flash('Wrong post data')
|
62
|
66
|
return render('index.html')
|
63
|
67
|
selected_engines = []
|
|
68
|
+ selected_categories = []
|
64
|
69
|
for pd_name,pd in request.form.items():
|
65
|
|
- if pd_name.startswith('engine_'):
|
66
|
|
- selected_engines.append(pd_name[7:])
|
|
70
|
+ if pd_name.startswith('category_'):
|
|
71
|
+ category = pd_name[9:]
|
|
72
|
+ if not category in categories:
|
|
73
|
+ continue
|
|
74
|
+ selected_categories.append(category)
|
|
75
|
+ selected_engines.extend(x.name for x in categories[category])
|
67
|
76
|
if not len(selected_engines):
|
68
|
|
- selected_engines = engines.keys()
|
|
77
|
+ selected_engines = [x.name for x in categories['general']]
|
69
|
78
|
query = request.form['q'].encode('utf-8')
|
70
|
79
|
results = search(query, request, selected_engines)
|
71
|
80
|
if request.form.get('format') == 'json':
|
72
|
81
|
# TODO HTTP headers
|
73
|
82
|
return json.dumps({'query': query, 'results': results})
|
74
|
|
- return render('results.html', results=results, q=query.decode('utf-8'))
|
|
83
|
+ return render('results.html', results=results, q=query.decode('utf-8'), selected_categories=selected_categories)
|
75
|
84
|
return render('index.html')
|
76
|
85
|
|
77
|
86
|
@app.route('/favicon.ico', methods=['GET'])
|