2"""Implement request processors used by engine-types."""
6 "OnlineCurrenciesParams",
10 "OnlineUrlSearchParams",
18from searx
import logger
19from searx
import engines
21from .abstract
import EngineProcessor, RequestParams
22from .offline
import OfflineProcessor
23from .online
import OnlineProcessor, OnlineParams
24from .online_dictionary
import OnlineDictionaryProcessor, OnlineDictParams
25from .online_currency
import OnlineCurrencyProcessor, OnlineCurrenciesParams
26from .online_url_search
import OnlineUrlSearchProcessor, OnlineUrlSearchParams
28logger = logger.getChild(
"search.processors")
30OnlineParamTypes: t.TypeAlias = OnlineParams | OnlineDictParams | OnlineCurrenciesParams | OnlineUrlSearchParams
31OfflineParamTypes: t.TypeAlias = RequestParams
32ParamTypes: t.TypeAlias = OfflineParamTypes | OnlineParamTypes
36 """Class to manage :py:obj:`EngineProcessor` instances in a key/value map
37 (instances stored by *engine-name*)."""
39 processor_types: dict[str, type[EngineProcessor]] = {
40 OnlineProcessor.engine_type: OnlineProcessor,
41 OfflineProcessor.engine_type: OfflineProcessor,
42 OnlineDictionaryProcessor.engine_type: OnlineDictionaryProcessor,
43 OnlineCurrencyProcessor.engine_type: OnlineCurrencyProcessor,
44 OnlineUrlSearchProcessor.engine_type: OnlineUrlSearchProcessor,
47 def init(self, engine_list: list[dict[str, t.Any]]):
48 """Initialize all engines and registers a processor for each engine."""
50 for eng_settings
in engine_list:
51 eng_name: str = eng_settings[
"name"]
53 if eng_settings.get(
"inactive",
False)
is True:
54 logger.info(
"Engine of name '%s' is inactive.", eng_name)
57 eng_obj = engines.engines.get(eng_name)
59 logger.warning(
"Engine of name '%s' does not exists.", eng_name)
62 eng_type = getattr(eng_obj,
"engine_type",
"online")
65 logger.error(
"Engine '%s' is of unknown engine_type: %s", eng_type)
69 eng_proc = proc_cls(eng_obj)
73 """Register the :py:obj:`EngineProcessor`.
75 This method is usually passed as a callback to the initialization of the
76 :py:obj:`EngineProcessor`.
78 The value (true/false) passed in ``eng_proc_ok`` indicates whether the
79 initialization of the :py:obj:`EngineProcessor` was successful; if this
80 is not the case, the processor is not registered.
84 self[eng_proc.engine.name] = eng_proc
87 logger.error(
"init method of engine %s failed (%s).", eng_proc.engine.name)
93"""Global :py:obj:`ProcessorMap`.
init(self, list[dict[str, t.Any]] engine_list)