[fix] engines initialization - if engine load fails, set to inactive

- if engine load fails, set the engine to inactive
- dont' load a engine, when the config says its inactive

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Markus Heiser 2025-11-23 12:30:14 +01:00 committed by Markus Heiser
parent 3f30831640
commit 989b49335c
3 changed files with 9 additions and 3 deletions

View File

@ -270,7 +270,14 @@ def load_engines(engine_list: list[dict[str, t.Any]]):
categories.clear() categories.clear()
categories['general'] = [] categories['general'] = []
for engine_data in engine_list: for engine_data in engine_list:
if engine_data.get("inactive") is True:
continue
engine = load_engine(engine_data) engine = load_engine(engine_data)
if engine: if engine:
register_engine(engine) register_engine(engine)
else:
# if an engine can't be loaded (if for example the engine is missing
# tor or some other requirements) its set to inactive!
logger.error("loading engine %s failed: set engine to inactive!", engine_data.get("name", "???"))
engine_data["inactive"] = True
return engines return engines

View File

@ -51,7 +51,6 @@ class ProcessorMap(dict[str, EngineProcessor]):
eng_name: str = eng_settings["name"] eng_name: str = eng_settings["name"]
if eng_settings.get("inactive", False) is True: if eng_settings.get("inactive", False) is True:
logger.info("Engine of name '%s' is inactive.", eng_name)
continue continue
eng_obj = engines.engines.get(eng_name) eng_obj = engines.engines.get(eng_name)

View File

@ -61,7 +61,7 @@ class TestEnginesInit(SearxTestCase):
with self.assertLogs('searx.engines', level='ERROR') as cm: # pylint: disable=invalid-name with self.assertLogs('searx.engines', level='ERROR') as cm: # pylint: disable=invalid-name
engines.load_engines(engine_list) engines.load_engines(engine_list)
self.assertEqual(len(engines.engines), 0) self.assertEqual(len(engines.engines), 0)
self.assertEqual(cm.output, ['ERROR:searx.engines:An engine does not have a "name" field']) self.assertEqual(cm.output[0], 'ERROR:searx.engines:An engine does not have a "name" field')
def test_missing_engine_field(self): def test_missing_engine_field(self):
settings['outgoing']['using_tor_proxy'] = False settings['outgoing']['using_tor_proxy'] = False
@ -72,5 +72,5 @@ class TestEnginesInit(SearxTestCase):
engines.load_engines(engine_list) engines.load_engines(engine_list)
self.assertEqual(len(engines.engines), 0) self.assertEqual(len(engines.engines), 0)
self.assertEqual( self.assertEqual(
cm.output, ['ERROR:searx.engines:The "engine" field is missing for the engine named "engine2"'] cm.output[0], 'ERROR:searx.engines:The "engine" field is missing for the engine named "engine2"'
) )