@@ -23,7 +23,7 @@ if __name__ == "__main__":
23 path.append(realpath(dirname(realpath(__file__))+'/../'))
23 path.append(realpath(dirname(realpath(__file__))+'/../'))
25from flask import Flask, request, render_template, url_for, Response, make_response
25from flask import Flask, request, render_template, url_for, Response, make_response
26−from searx.engines import search, categories, get_engines_stats
26+from searx.engines import search, categories, engines, get_engines_stats
27from searx import settings
27from searx import settings
28import json
28import json
@@ -56,6 +56,14 @@ def render(template_name, **kwargs):
56 kwargs['selected_categories'] = ['general']
56 kwargs['selected_categories'] = ['general']
57 return render_template(template_name, **kwargs)
57 return render_template(template_name, **kwargs)
59+def parse_query(query):
61+ query_parts = query.split()
62+ if query_parts[0].startswith('-') and query_parts[0][1:] in engines:
63+ query_engines.append({'category': 'TODO', 'name': query_parts[0][1:]})
64+ query = query.replace(query_parts[0], '', 1).strip()
65+ return query, query_engines
59@app.route('/', methods=['GET', 'POST'])
67@app.route('/', methods=['GET', 'POST'])
60def index():
68def index():
61 global categories
69 global categories
@@ -66,26 +74,27 @@ def index():
66 if not request_data.get('q'):
74 if not request_data.get('q'):
67 return render('index.html')
75 return render('index.html')
69− query = request_data['q'].encode('utf-8')
71 selected_categories = []
77 selected_categories = []
72− for pd_name,pd in request_data.items():
73− if pd_name.startswith('category_'):
74− category = pd_name[9:]
75− if not category in categories:
77− selected_categories.append(category)
78− if not len(selected_categories):
79− cookie_categories = request.cookies.get('categories', '').split(',')
80− for ccateg in cookie_categories:
81− if ccateg in categories:
82− selected_categories.append(ccateg)
83− if not len(selected_categories):
84− selected_categories = ['general']
86− selected_engines = []
79+ query, selected_engines = parse_query(request_data['q'].encode('utf-8'))
81+ if not len(selected_engines):
82+ for pd_name,pd in request_data.items():
83+ if pd_name.startswith('category_'):
84+ category = pd_name[9:]
85+ if not category in categories:
87− for categ in selected_categories:
87+ selected_categories.append(category)
88+ if not len(selected_categories):
89+ cookie_categories = request.cookies.get('categories', '').split(',')
90+ for ccateg in cookie_categories:
91+ if ccateg in categories:
92+ selected_categories.append(ccateg)
93+ if not len(selected_categories):
94+ selected_categories = ['general']
96+ for categ in selected_categories:
88− selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
97+ selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
90 results = search(query, request, selected_engines)
99 results = search(query, request, selected_engines)
91 for result in results:
100 for result in results:
@@ -97,7 +106,7 @@ def index():
97 return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
106 return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
98 template = render('results.html'
107 template = render('results.html'
99 ,results=results
108 ,results=results
100− ,q=query.decode('utf-8')
109+ ,q=request_data['q']
101 ,selected_categories=selected_categories
110 ,selected_categories=selected_categories
102 ,number_of_results=len(results)
111 ,number_of_results=len(results)