| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | # SPDX-License-Identifier: AGPL-3.0-or-later# lint: pylint"""Engine related implementations.. note::   The long term goal is to modularize all relevant implementations to the   engines here in this Python package.  In addition to improved modularization,   this will also be necessary in part because the probability of circular   imports will increase due to the increased typification of implementations in   the future.   ToDo:   - move :py:obj:`searx.engines.load_engine` to a new module `searx.enginelib`."""from __future__ import annotationsfrom typing import List, Callable, TYPE_CHECKINGif TYPE_CHECKING:    from searx.enginelib import traitsclass Engine:  # pylint: disable=too-few-public-methods    """Class of engine instances build from YAML settings.    Further documentation see :ref:`general engine configuration`.    .. hint::       This class is currently never initialized and only used for type hinting.    """    # Common options in the engine module    engine_type: str    """Type of the engine (:origin:`searx/search/processors`)"""    paging: bool    """Engine supports multiple pages."""    time_range_support: bool    """Engine supports search time range."""    safesearch: bool    """Engine supports SafeSearch"""    language_support: bool    """Engine supports languages (locales) search."""    language: str    """For an engine, when there is ``language: ...`` in the YAML settings the engine    does support only this one language:    .. code:: yaml      - name: google french        engine: google        language: fr    """    region: str    """For an engine, when there is ``region: ...`` in the YAML settings the engine    does support only this one region::    .. code:: yaml      - name: google belgium        engine: google        region: fr-BE    """    fetch_traits: Callable    """Function to to fetch engine's traits from origin."""    traits: traits.EngineTraits    """Traits of the engine."""    # settings.yml    categories: List[str]    """Specifies to which :ref:`engine categories` the engine should be added."""    name: str    """Name that will be used across SearXNG to define this engine.  In settings, on    the result page .."""    engine: str    """Name of the python file used to handle requests and responses to and from    this search engine (file name from :origin:`searx/engines` without    ``.py``)."""    enable_http: bool    """Enable HTTP (by default only HTTPS is enabled)."""    shortcut: str    """Code used to execute bang requests (``!foo``)"""    timeout: float    """Specific timeout for search-engine."""    display_error_messages: bool    """Display error messages on the web UI."""    proxies: dict    """Set proxies for a specific engine (YAML):    .. code:: yaml       proxies :         http:  socks5://proxy:port         https: socks5://proxy:port    """    disabled: bool    """To disable by default the engine, but not deleting it.  It will allow the    user to manually activate it in the settings."""    inactive: bool    """Remove the engine from the settings (*disabled & removed*)."""    about: dict    """Additional fileds describing the engine.    .. code:: yaml       about:          website: https://example.com          wikidata_id: Q306656          official_api_documentation: https://example.com/api-doc          use_official_api: true          require_api_key: true          results: HTML    """    using_tor_proxy: bool    """Using tor proxy (``true``) or not (``false``) for this engine."""    send_accept_language_header: bool    """When this option is activated, the language (locale) that is selected by    the user is used to build and send a ``Accept-Language`` header in the    request to the origin search engine."""    tokens: List[str]    """A list of secret tokens to make this engine *private*, more details see    :ref:`private engines`."""
 |