@@ -3,6 +3,7 @@ from os.path import realpath, dirname, splitext, join
3from os import listdir
3from os import listdir
4from imp import load_source
4from imp import load_source
5import grequests
5import grequests
6+from itertools import izip_longest, chain
7engine_dir = dirname(realpath(__file__))
8engine_dir = dirname(realpath(__file__))
@@ -23,15 +24,17 @@ def default_request_params():
24def make_callback(engine_name, results, callback):
25def make_callback(engine_name, results, callback):
25 def process_callback(response, **kwargs):
26 def process_callback(response, **kwargs):
26 for result in callback(response):
28 for result in callback(response):
27 result['engine'] = engine_name
29 result['engine'] = engine_name
28− results.append(result)
30+ cb_res.append(result)
31+ results[engine_name] = cb_res
29 return process_callback
32 return process_callback
31def search(query, request, selected_engines):
34def search(query, request, selected_engines):
32 global engines
35 global engines
33 requests = []
36 requests = []
34− results = []
37+ results = {}
35 user_agent = request.headers.get('User-Agent', '')
38 user_agent = request.headers.get('User-Agent', '')
36 for ename, engine in engines.items():
39 for ename, engine in engines.items():
37 if ename not in selected_engines:
40 if ename not in selected_engines:
@@ -53,4 +56,4 @@ def search(query, request, selected_engines):
54 requests.append(req)
57 requests.append(req)
55 grequests.map(requests)
58 grequests.map(requests)
56− return results
59+ return list(filter(None, chain(*izip_longest(*results.values()))))