on master help sign in
[enh] categories to request callback
commit8520be3cd6bb2ae4aa4ee483f632ef7fca318e1a authorasciimoo <asciimoo@gmail.com> dateTue 22 Oct 2013, 18:57 (13 years ago) parentf01b1dc
2 files changed+41−39
searx/engines/__init__.py+12−5 searx/webapp.py+29−34
searx/engines/__init__.py+12−5
@@ -61,18 +61,25 @@ def make_callback(engine_name, results, callback):
6161 results[engine_name] = cb_res
6262 return process_callback
6363
64−def search(query, request, selected_engines):
65− global engines
64+def search(query, request, selected_categories):
65+ global engines, categories
6666 requests = []
6767 results = {}
68+ selected_engines = []
6869 user_agent = request.headers.get('User-Agent', '')
69− for ename, engine in engines.items():
70− if ename not in selected_engines:
70+ if not len(selected_categories):
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:
7176 continue
77+ engine = engines[selected_engine['name']]
7278 request_params = default_request_params()
7379 request_params['headers']['User-Agent'] = user_agent
80+ request_params['category'] = selected_engine['category']
7481 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)
7683 if request_params['method'] == 'GET':
7784 req = grequests.get(request_params['url']
7885 ,headers=request_params['headers']
searx/webapp.py+29−34
@@ -63,40 +63,35 @@ def index():
6363 request_data = request.form
6464 else:
6565 request_data = request.args
66− if request_data.get('q'):
67− selected_engines = []
68− selected_categories = []
69− for pd_name,pd in request_data.items():
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])
76− if not len(selected_engines):
77− cookie_categories = request.cookies.get('categories', '').split(',')
78− for ccateg in cookie_categories:
79− if ccateg in categories:
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')
86− results = search(query, request, selected_engines)
87− if request_data.get('format') == 'json':
88− # TODO HTTP headers
89− return json.dumps({'query': query, 'results': results})
90− template = render('results.html'
91− ,results=results
92− ,q=query.decode('utf-8')
93− ,selected_categories=selected_categories
94− ,number_of_results=len(results)
95− )
96− resp = make_response(template)
97− resp.set_cookie('categories', ','.join(selected_categories))
98− return resp
99− return render('index.html')
66+ if not request_data.get('q'):
67+ return render('index.html')
68+ selected_engines = []
69+ selected_categories = []
70+ for pd_name,pd in request_data.items():
71+ if pd_name.startswith('category_'):
72+ category = pd_name[9:]
73+ if not category in categories:
74+ continue
75+ selected_categories.append(category)
76+ if not len(selected_categories):
77+ cookie_categories = request.cookies.get('categories', '').split(',')
78+ for ccateg in cookie_categories:
79+ if ccateg in categories:
80+ selected_categories.append(ccateg)
81+ query = request_data['q'].encode('utf-8')
82+ results = search(query, request, selected_categories)
83+ if request_data.get('format') == 'json':
84+ # TODO HTTP headers
85+ return json.dumps({'query': query, 'results': results})
86+ template = render('results.html'
87+ ,results=results
88+ ,q=query.decode('utf-8')
89+ ,selected_categories=selected_categories
90+ ,number_of_results=len(results)
91+ )
92+ resp = make_response(template)
93+ resp.set_cookie('categories', ','.join(selected_categories))
94+ return resp
10095
10196@app.route('/favicon.ico', methods=['GET'])
10297def fav():