on master help sign in
[enh] categories to request callback
8520be3asciimoo
searx/engines/__init__.py+12−5
@@ -61,18 +61,25 @@ def make_callback(engine_name, results, callback):
61 results[engine_name] = cb_res
61 results[engine_name] = cb_res
62 return process_callback
62 return process_callback
63
63
64−def search(query, request, selected_engines):
64+def search(query, request, selected_categories):
65− global engines
65+ global engines, categories
66 requests = []
66 requests = []
67 results = {}
67 results = {}
68+ selected_engines = []
68 user_agent = request.headers.get('User-Agent', '')
69 user_agent = request.headers.get('User-Agent', '')
69− for ename, engine in engines.items():
70+ if not len(selected_categories):
70− if ename not in selected_engines:
71+ selected_categories = ['general']
72+ for categ in selected_categories:
73+ selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
74+ for selected_engine in selected_engines:
75+ if selected_engine['name'] not in engines:
71 continue
76 continue
77+ engine = engines[selected_engine['name']]
72 request_params = default_request_params()
78 request_params = default_request_params()
73 request_params['headers']['User-Agent'] = user_agent
79 request_params['headers']['User-Agent'] = user_agent
80+ request_params['category'] = selected_engine['category']
74 request_params = engine.request(query, request_params)
81 request_params = engine.request(query, request_params)
75− callback = make_callback(ename, results, engine.response)
82+ callback = make_callback(selected_engine['name'], results, engine.response)
76 if request_params['method'] == 'GET':
83 if request_params['method'] == 'GET':
77 req = grequests.get(request_params['url']
84 req = grequests.get(request_params['url']
78 ,headers=request_params['headers']
85 ,headers=request_params['headers']
searx/webapp.py+29−34
@@ -63,40 +63,35 @@ def index():
63 request_data = request.form
63 request_data = request.form
64 else:
64 else:
65 request_data = request.args
65 request_data = request.args
66− if request_data.get('q'):
66+ if not request_data.get('q'):
67+ return render('index.html')
67− selected_engines = []
68+ selected_engines = []
68− selected_categories = []
69+ selected_categories = []
69− for pd_name,pd in request_data.items():
70+ for pd_name,pd in request_data.items():
70− if pd_name.startswith('category_'):
71+ if pd_name.startswith('category_'):
71− category = pd_name[9:]
72+ category = pd_name[9:]
72− if not category in categories:
73+ if not category in categories:
73− continue
74+ continue
74− selected_categories.append(category)
75+ selected_categories.append(category)
75− selected_engines.extend(x.name for x in categories[category])
76+ if not len(selected_categories):
76− if not len(selected_engines):
77− cookie_categories = request.cookies.get('categories', '').split(',')
77+ cookie_categories = request.cookies.get('categories', '').split(',')
78− for ccateg in cookie_categories:
78+ for ccateg in cookie_categories:
79− if ccateg in categories:
79+ if ccateg in categories:
80− selected_categories.append(ccateg)
80+ selected_categories.append(ccateg)
81− selected_engines.extend(x.name for x in categories[ccateg])
82− if not len(selected_engines):
83− selected_categories.append('general')
84− selected_engines.extend(x.name for x in categories['general'])
85− query = request_data['q'].encode('utf-8')
81+ query = request_data['q'].encode('utf-8')
86− results = search(query, request, selected_engines)
82+ results = search(query, request, selected_categories)
87− if request_data.get('format') == 'json':
83+ if request_data.get('format') == 'json':
88− # TODO HTTP headers
84+ # TODO HTTP headers
89− return json.dumps({'query': query, 'results': results})
85+ return json.dumps({'query': query, 'results': results})
90− template = render('results.html'
86+ template = render('results.html'
91− ,results=results
87+ ,results=results
92− ,q=query.decode('utf-8')
88+ ,q=query.decode('utf-8')
93− ,selected_categories=selected_categories
89+ ,selected_categories=selected_categories
94− ,number_of_results=len(results)
90+ ,number_of_results=len(results)
95− )
91+ )
96− resp = make_response(template)
92+ resp = make_response(template)
97− resp.set_cookie('categories', ','.join(selected_categories))
93+ resp.set_cookie('categories', ','.join(selected_categories))
98− return resp
94+ return resp
99− return render('index.html')
100
95
101@app.route('/favicon.ico', methods=['GET'])
96@app.route('/favicon.ico', methods=['GET'])
102def fav():
97def fav():