on master help sign in
Merge pull request #1653 from dalf/bug-fixes
4b56a4bAlexandre Flament
searx/engines/__init__.py+16−9
@@ -57,11 +57,16 @@ engine_default_args = {'paging': False,
57
57
58
58
59def load_engine(engine_data):
59def load_engine(engine_data):
60−
60+ engine_name = engine_data['name']
61− if '_' in engine_data['name']:
61+ if '_' in engine_name:
62− logger.error('Engine name conains underscore: "{}"'.format(engine_data['name']))
62+ logger.error('Engine name contains underscore: "{}"'.format(engine_name))
63 sys.exit(1)
63 sys.exit(1)
64
64
65+ if engine_name.lower() != engine_name:
66+ logger.warn('Engine name is not lowercase: "{}", converting to lowercase'.format(engine_name))
67+ engine_name = engine_name.lower()
68+ engine_data['name'] = engine_name
69+
65 engine_module = engine_data['engine']
70 engine_module = engine_data['engine']
66
71
67 try:
72 try:
@@ -248,12 +253,14 @@ def load_engines(engine_list):
248
253
249def initialize_engines(engine_list):
254def initialize_engines(engine_list):
250 load_engines(engine_list)
255 load_engines(engine_list)
256+
257+ def engine_init(engine_name, init_fn):
258+ init_fn()
259+ logger.debug('%s engine: Initialized', engine_name)
260+
251 for engine_name, engine in engines.items():
261 for engine_name, engine in engines.items():
252 if hasattr(engine, 'init'):
262 if hasattr(engine, 'init'):
253 init_fn = getattr(engine, 'init')
263 init_fn = getattr(engine, 'init')
254−
255− def engine_init():
256− init_fn()
264+ if init_fn:
257− logger.debug('%s engine initialized', engine_name)
258− logger.debug('Starting background initialization of %s engine', engine_name)
265+ logger.debug('%s engine: Starting background initialization', engine_name)
259− threading.Thread(target=engine_init).start()
266+ threading.Thread(target=engine_init, args=(engine_name, init_fn)).start()
searx/results.py+12−3
@@ -212,11 +212,20 @@ class ResultContainer(object):
212
212
213 # check for duplicates
213 # check for duplicates
214 duplicated = False
214 duplicated = False
215+ result_template = result.get('template')
215 for merged_result in self._merged_results:
216 for merged_result in self._merged_results:
216 if compare_urls(result['parsed_url'], merged_result['parsed_url'])\
217 if compare_urls(result['parsed_url'], merged_result['parsed_url'])\
218+ and result_template == merged_result.get('template'):
219+ if result_template != 'images.html':
220+ # not an image, same template, same url : it's a duplicate
221+ duplicated = merged_result
222+ break
223+ else:
224+ # it's an image
225+ # it's a duplicate if the parsed_url, template and img_src are differents
217− and result.get('template') == merged_result.get('template'):
226+ if result.get('img_src', '') == merged_result.get('img_src', ''):
218− duplicated = merged_result
227+ duplicated = merged_result
219− break
228+ break
220
229
221 # merge duplicates together
230 # merge duplicates together
222 if duplicated:
231 if duplicated:
searx/search.py+9
@@ -198,6 +198,13 @@ def default_request_params():
198 }
198 }
199
199
200
200
201+# remove duplicate queries.
202+# FIXME: does not fix "!music !soundcloud", because the categories are 'none' and 'music'
203+def deduplicate_query_engines(query_engines):
204+ uniq_query_engines = {q["category"] + '|' + q["name"]: q for q in query_engines}
205+ return uniq_query_engines.values()
206+
207+
201def get_search_query_from_webapp(preferences, form):
208def get_search_query_from_webapp(preferences, form):
202 # no text for the query ?
209 # no text for the query ?
203 if not form.get('q'):
210 if not form.get('q'):
@@ -328,6 +335,8 @@ def get_search_query_from_webapp(preferences, form):
328 for engine in categories[categ]
335 for engine in categories[categ]
329 if (engine.name, categ) not in disabled_engines)
336 if (engine.name, categ) not in disabled_engines)
330
337
338+ query_engines = deduplicate_query_engines(query_engines)
339+
331 return (SearchQuery(query, query_engines, query_categories,
340 return (SearchQuery(query, query_engines, query_categories,
332 query_lang, query_safesearch, query_pageno, query_time_range),
341 query_lang, query_safesearch, query_pageno, query_time_range),
333 raw_text_query)
342 raw_text_query)
searx/settings.yml+1−1
@@ -707,7 +707,7 @@ engines:
707 shortcut : 1337x
707 shortcut : 1337x
708 disabled : True
708 disabled : True
709
709
710− - name : Duden
710+ - name : duden
711 engine : duden
711 engine : duden
712 shortcut : du
712 shortcut : du
713 disabled : True
713 disabled : True
searx/webapp.py+1−1
@@ -916,7 +916,7 @@ def page_not_found(e):
916
916
917
917
918def run():
918def run():
919− logger.debug('starting webserver on %s:%s', settings['server']['port'], settings['server']['bind_address'])
919+ logger.debug('starting webserver on %s:%s', settings['server']['bind_address'], settings['server']['port'])
920 app.run(
920 app.run(
921 debug=searx_debug,
921 debug=searx_debug,
922 use_debugger=searx_debug,
922 use_debugger=searx_debug,