Browse Source

[enh] test: load each engine to check for syntax errors

Dalf 4 years ago
parent
commit
4fb3ed2c63
3 changed files with 23 additions and 12 deletions
  1. 6 7
      searx/engines/__init__.py
  2. 4 5
      searx/webapp.py
  3. 13 0
      tests/unit/test_engines.py

+ 6 - 7
searx/engines/__init__.py

@@ -72,11 +72,8 @@ def load_engine(engine_data):
 
     engine_module = engine_data['engine']
 
-    try:
-        engine = load_module(engine_module + '.py', engine_dir)
-    except:
-        logger.exception('Cannot load engine "{}"'.format(engine_module))
-        return None
+    # can raise an exception
+    engine = load_module(engine_module + '.py', engine_dir)
 
     for param_name in engine_data:
         if param_name == 'engine':
@@ -254,9 +251,11 @@ def load_engines(engine_list):
     global engines
     engines.clear()
     for engine_data in engine_list:
-        engine = load_engine(engine_data)
-        if engine is not None:
+        try:
+            engine = load_engine(engine_data)
             engines[engine.name] = engine
+        except:
+            logger.exception('Cannot load engine "{}"'.format(engine_data['engine']))
     return engines
 
 

+ 4 - 5
searx/webapp.py

@@ -136,11 +136,6 @@ app.jinja_env.lstrip_blocks = True
 app.jinja_env.add_extension('jinja2.ext.loopcontrols')
 app.secret_key = settings['server']['secret_key']
 
-if not searx_debug \
-   or os.environ.get("WERKZEUG_RUN_MAIN") == "true" \
-   or os.environ.get('UWSGI_ORIGINAL_PROC_NAME') is not None:
-    initialize_engines(settings['engines'])
-
 babel = Babel(app)
 
 rtl_locales = ['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'fa_IR', 'glk', 'he',
@@ -1051,6 +1046,10 @@ def page_not_found(e):
 
 
 def run():
+    if not searx_debug \
+       or os.environ.get("WERKZEUG_RUN_MAIN") == "true" \
+       or os.environ.get('UWSGI_ORIGINAL_PROC_NAME') is not None:
+        initialize_engines(settings['engines'])
     logger.debug('starting webserver on %s:%s', settings['server']['bind_address'], settings['server']['port'])
     app.run(
         debug=searx_debug,

+ 13 - 0
tests/unit/test_engines.py

@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+
+import unittest2 as unittest
+from unittest2.util import strclass
+from searx.engines import load_engine
+from searx import settings
+
+
+class TestEngine(unittest.TestCase):
+
+    def test_engines(self):
+        for engine_data in settings['engines']:
+            load_engine(engine_data)