Browse Source

Merge pull request #1653 from dalf/bug-fixes

Various bug fixes
Alexandre Flament 5 years ago
parent
commit
4b56a4bfaa
5 changed files with 39 additions and 14 deletions
  1. 16 9
      searx/engines/__init__.py
  2. 12 3
      searx/results.py
  3. 9 0
      searx/search.py
  4. 1 1
      searx/settings.yml
  5. 1 1
      searx/webapp.py

+ 16 - 9
searx/engines/__init__.py

@@ -57,11 +57,16 @@ engine_default_args = {'paging': False,
 
 
 def load_engine(engine_data):
-
-    if '_' in engine_data['name']:
-        logger.error('Engine name conains underscore: "{}"'.format(engine_data['name']))
+    engine_name = engine_data['name']
+    if '_' in engine_name:
+        logger.error('Engine name contains underscore: "{}"'.format(engine_name))
         sys.exit(1)
 
+    if engine_name.lower() != engine_name:
+        logger.warn('Engine name is not lowercase: "{}", converting to lowercase'.format(engine_name))
+        engine_name = engine_name.lower()
+        engine_data['name'] = engine_name
+
     engine_module = engine_data['engine']
 
     try:
@@ -248,12 +253,14 @@ def load_engines(engine_list):
 
 def initialize_engines(engine_list):
     load_engines(engine_list)
+
+    def engine_init(engine_name, init_fn):
+        init_fn()
+        logger.debug('%s engine: Initialized', engine_name)
+
     for engine_name, engine in engines.items():
         if hasattr(engine, 'init'):
             init_fn = getattr(engine, 'init')
-
-            def engine_init():
-                init_fn()
-                logger.debug('%s engine initialized', engine_name)
-            logger.debug('Starting background initialization of %s engine', engine_name)
-            threading.Thread(target=engine_init).start()
+            if init_fn:
+                logger.debug('%s engine: Starting background initialization', engine_name)
+                threading.Thread(target=engine_init, args=(engine_name, init_fn)).start()

+ 12 - 3
searx/results.py

@@ -212,11 +212,20 @@ class ResultContainer(object):
 
         # check for duplicates
         duplicated = False
+        result_template = result.get('template')
         for merged_result in self._merged_results:
             if compare_urls(result['parsed_url'], merged_result['parsed_url'])\
-               and result.get('template') == merged_result.get('template'):
-                duplicated = merged_result
-                break
+               and result_template == merged_result.get('template'):
+                if result_template != 'images.html':
+                    # not an image, same template, same url : it's a duplicate
+                    duplicated = merged_result
+                    break
+                else:
+                    # it's an image
+                    # it's a duplicate if the parsed_url, template and img_src are differents
+                    if result.get('img_src', '') == merged_result.get('img_src', ''):
+                        duplicated = merged_result
+                        break
 
         # merge duplicates together
         if duplicated:

+ 9 - 0
searx/search.py

@@ -198,6 +198,13 @@ def default_request_params():
     }
 
 
+# remove duplicate queries.
+# FIXME: does not fix "!music !soundcloud", because the categories are 'none' and 'music'
+def deduplicate_query_engines(query_engines):
+    uniq_query_engines = {q["category"] + '|' + q["name"]: q for q in query_engines}
+    return uniq_query_engines.values()
+
+
 def get_search_query_from_webapp(preferences, form):
     # no text for the query ?
     if not form.get('q'):
@@ -328,6 +335,8 @@ def get_search_query_from_webapp(preferences, form):
                                      for engine in categories[categ]
                                      if (engine.name, categ) not in disabled_engines)
 
+    query_engines = deduplicate_query_engines(query_engines)
+
     return (SearchQuery(query, query_engines, query_categories,
                         query_lang, query_safesearch, query_pageno, query_time_range),
             raw_text_query)

+ 1 - 1
searx/settings.yml

@@ -707,7 +707,7 @@ engines:
     shortcut : 1337x
     disabled : True
 
-  - name : Duden
+  - name : duden
     engine : duden
     shortcut : du
     disabled : True

+ 1 - 1
searx/webapp.py

@@ -916,7 +916,7 @@ def page_not_found(e):
 
 
 def run():
-    logger.debug('starting webserver on %s:%s', settings['server']['port'], settings['server']['bind_address'])
+    logger.debug('starting webserver on %s:%s', settings['server']['bind_address'], settings['server']['port'])
     app.run(
         debug=searx_debug,
         use_debugger=searx_debug,