2022-09-29 18:54:46 +00:00
|
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
# lint: pylint
|
2023-06-30 16:07:02 +00:00
|
|
|
"""Implementations of the framework for the SearXNG engines.
|
2022-09-29 18:54:46 +00:00
|
|
|
|
2023-06-30 16:07:02 +00:00
|
|
|
.. hint::
|
2022-09-29 18:54:46 +00:00
|
|
|
|
2023-06-30 16:07:02 +00:00
|
|
|
The long term goal is to modularize all implementations of the engine
|
|
|
|
framework here in this Python package. ToDo:
|
2022-09-29 18:54:46 +00:00
|
|
|
|
2023-06-30 16:07:02 +00:00
|
|
|
- move implementations of the :ref:`searx.engines loader` to a new module in
|
|
|
|
the :py:obj:`searx.enginelib` namespace.
|
2022-09-29 18:54:46 +00:00
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
2023-06-25 10:37:31 +00:00
|
|
|
from typing import List, Callable, TYPE_CHECKING
|
2022-09-29 18:54:46 +00:00
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from searx.enginelib import traits
|
|
|
|
|
|
|
|
|
|
|
|
class 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
|
2023-06-30 16:07:02 +00:00
|
|
|
"""Type of the engine (:ref:`searx.search.processors`)"""
|
2022-09-29 18:54:46 +00:00
|
|
|
|
|
|
|
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]
|
2022-07-24 08:51:22 +00:00
|
|
|
"""Specifies to which :ref:`engine categories` the engine should be added."""
|
2022-09-29 18:54:46 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
"""
|
2023-06-25 10:37:31 +00:00
|
|
|
|
|
|
|
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`."""
|