| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | # SPDX-License-Identifier: AGPL-3.0-or-later# lint: pylint"""Implement request processores used by engine-types."""__all__ = [    'EngineProcessor',    'OfflineProcessor',    'OnlineProcessor',    'OnlineDictionaryProcessor',    'OnlineCurrencyProcessor',    'PROCESSORS',]import threadingfrom searx import loggerimport searx.engines as enginesfrom .online import OnlineProcessorfrom .offline import OfflineProcessorfrom .online_dictionary import OnlineDictionaryProcessorfrom .online_currency import OnlineCurrencyProcessorfrom .abstract import EngineProcessorlogger = logger.getChild('search.processors')PROCESSORS = {}"""Cache request processores, stored by *engine-name* (:py:func:`initialize`)"""def get_processor_class(engine_type):    """Return processor class according to the ``engine_type``"""    for c in [OnlineProcessor, OfflineProcessor, OnlineDictionaryProcessor, OnlineCurrencyProcessor]:        if c.engine_type == engine_type:            return c    return Nonedef get_processor(engine, engine_name):    """Return processor instance that fits to ``engine.engine.type``)"""    engine_type = getattr(engine, 'engine_type', 'online')    processor_class = get_processor_class(engine_type)    if processor_class:        return processor_class(engine, engine_name)    return Nonedef initialize_processor(processor):    """Initialize one processor    Call the init function of the engine    """    if processor.has_initialize_function:        t = threading.Thread(target=processor.initialize, daemon=True)        t.start()def initialize(engine_list):    """Initialize all engines and store a processor for each engine in :py:obj:`PROCESSORS`."""    for engine_data in engine_list:        engine_name = engine_data['name']        engine = engines.engines.get(engine_name)        if engine:            processor = get_processor(engine, engine_name)            initialize_processor(processor)            if processor is None:                logger.error('Error get processor for engine %s', engine_name)            else:                PROCESSORS[engine_name] = processor
 |