__init__.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Implement request processores used by engine-types.
  4. """
  5. __all__ = [
  6. 'EngineProcessor',
  7. 'OfflineProcessor',
  8. 'OnlineProcessor',
  9. 'OnlineDictionaryProcessor',
  10. 'OnlineCurrencyProcessor',
  11. 'processors',
  12. ]
  13. from searx import logger
  14. import searx.engines as engines
  15. from .online import OnlineProcessor
  16. from .offline import OfflineProcessor
  17. from .online_dictionary import OnlineDictionaryProcessor
  18. from .online_currency import OnlineCurrencyProcessor
  19. from .abstract import EngineProcessor
  20. logger = logger.getChild('search.processors')
  21. processors = {}
  22. """Cache request processores, stored by *engine-name* (:py:func:`initialize`)"""
  23. def get_processor_class(engine_type):
  24. """Return processor class according to the ``engine_type``"""
  25. for c in [OnlineProcessor, OfflineProcessor, OnlineDictionaryProcessor, OnlineCurrencyProcessor]:
  26. if c.engine_type == engine_type:
  27. return c
  28. return None
  29. def get_processor(engine, engine_name):
  30. """Return processor instance that fits to ``engine.engine.type``)"""
  31. engine_type = getattr(engine, 'engine_type', 'online')
  32. processor_class = get_processor_class(engine_type)
  33. if processor_class:
  34. return processor_class(engine, engine_name)
  35. return None
  36. def initialize(engine_list):
  37. """Initialize all engines and store a processor for each engine in :py:obj:`processors`."""
  38. engines.initialize_engines(engine_list)
  39. for engine_name, engine in engines.engines.items():
  40. processor = get_processor(engine, engine_name)
  41. if processor is None:
  42. logger.error('Error get processor for engine %s', engine_name)
  43. else:
  44. processors[engine_name] = processor