summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOm Alve <om@turboml.com>2026-08-23 18:26:13 +0530
committerBnyro <bnyro@tutanota.com>2026-09-02 16:30:00 +0200
commitb4f616fed70b0598a1817fb828c0cce29d0451be (patch)
treeb0133d0ea0d822b1e907983eb5ac8102ab51ff79
parentfd29de6c55e81524172744d9f36917c271dd01b9 (diff)
[mod] engines: migrate to setup() from init() for simple tasks
-rw-r--r--searx/engines/adobe_stock.py10
-rw-r--r--searx/engines/baidu.py8
-rw-r--r--searx/engines/boardreader.py2
-rw-r--r--searx/engines/braveapi.py2
-rw-r--r--searx/engines/chinaso.py2
-rw-r--r--searx/engines/command.py3
-rw-r--r--searx/engines/dogpile.py2
-rw-r--r--searx/engines/duckduckgo_extra.py2
-rw-r--r--searx/engines/elasticsearch.py3
-rw-r--r--searx/engines/exaapi.py2
-rw-r--r--searx/engines/fireball.py2
-rw-r--r--searx/engines/gitea.py3
-rw-r--r--searx/engines/huggingface.py3
-rw-r--r--searx/engines/invidious.py3
-rw-r--r--searx/engines/kagi.py2
-rw-r--r--searx/engines/luxxle.py2
-rw-r--r--searx/engines/marginalia.py2
-rw-r--r--searx/engines/mariadb_server.py10
-rw-r--r--searx/engines/meilisearch.py4
-rw-r--r--searx/engines/mojeek.py3
-rw-r--r--searx/engines/mrs.py3
-rw-r--r--searx/engines/mysql_server.py10
-rw-r--r--searx/engines/naver.py4
-rw-r--r--searx/engines/pexels.py4
-rw-r--r--searx/engines/postgresql.py10
-rw-r--r--searx/engines/privacywall.py2
-rw-r--r--searx/engines/quark.py3
-rw-r--r--searx/engines/resulthunter.py2
-rw-r--r--searx/engines/s1search.py4
-rw-r--r--searx/engines/solr.py4
-rw-r--r--searx/engines/soundcloud.py4
-rw-r--r--searx/engines/sqlite.py2
-rw-r--r--searx/engines/startpage.py2
-rw-r--r--searx/engines/startpagina.py2
-rw-r--r--searx/engines/swisscows.py2
-rw-r--r--searx/engines/tiger.py4
-rw-r--r--searx/engines/tonline.py2
-rw-r--r--searx/engines/torznab.py2
-rw-r--r--searx/engines/tubearchivist.py3
-rw-r--r--searx/engines/tusksearch.py2
-rw-r--r--searx/engines/vuhuv.py2
-rw-r--r--searx/engines/wolframalpha_noapi.py4
-rw-r--r--searx/engines/yacy.py4
-rw-r--r--tests/unit/engines/test_command.py2
44 files changed, 87 insertions, 66 deletions
diff --git a/searx/engines/adobe_stock.py b/searx/engines/adobe_stock.py
index 335a505ee..a4ab11290 100644
--- a/searx/engines/adobe_stock.py
+++ b/searx/engines/adobe_stock.py
@@ -35,7 +35,7 @@ Implementation
==============
"""
-
+import typing as t
from datetime import datetime, timedelta
from urllib.parse import urlencode
@@ -85,7 +85,7 @@ Additional subcategories:
# Do we need support for "free_collection" and "include_stock_enterprise"?
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not categories:
raise ValueError("adobe_stock engine: categories is unset")
@@ -100,9 +100,9 @@ def init(_):
raise ValueError("adobe_stock engine: adobe_content_types is unset")
if isinstance(adobe_content_types, list):
- for t in adobe_content_types:
- if t not in ADOBE_VALID_TYPES:
- raise ValueError("adobe_stock engine: adobe_content_types: '%s' is invalid" % t)
+ for content_type in adobe_content_types:
+ if content_type not in ADOBE_VALID_TYPES:
+ raise ValueError("adobe_stock engine: adobe_content_types: '%s' is invalid" % content_type)
else:
raise ValueError(
"adobe_stock engine: adobe_content_types must be a list of strings not %s" % type(adobe_content_types)
diff --git a/searx/engines/baidu.py b/searx/engines/baidu.py
index 8aa2f2f6f..89eea0e35 100644
--- a/searx/engines/baidu.py
+++ b/searx/engines/baidu.py
@@ -49,6 +49,9 @@ CACHE: EngineCache
def setup(engine_settings: dict[str, t.Any]) -> bool:
+ if baidu_category not in ('general', 'images', 'it'):
+ raise SearxEngineAPIException(f"Unsupported category: {baidu_category}")
+
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"])
return True
@@ -65,11 +68,6 @@ def get_image_cookies(headers: dict[str, str]) -> dict[str, str]:
return cookies
-def init(_):
- if baidu_category not in ('general', 'images', 'it'):
- raise SearxEngineAPIException(f"Unsupported category: {baidu_category}")
-
-
def request(query, params):
page_num = params["pageno"]
diff --git a/searx/engines/boardreader.py b/searx/engines/boardreader.py
index b5baa5c3f..ce95c3504 100644
--- a/searx/engines/boardreader.py
+++ b/searx/engines/boardreader.py
@@ -45,7 +45,7 @@ CACHE_SESSION_ID_KEY = "session_id_key"
KEYWORD_RE = re.compile(r"\[\/?Keyword\]")
-def init(engine_settings: dict[str, t.Any]) -> bool:
+def setup(engine_settings: dict[str, t.Any]) -> bool:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_name=engine_settings["name"])
return True
diff --git a/searx/engines/braveapi.py b/searx/engines/braveapi.py
index 4b501c282..2efa099d1 100644
--- a/searx/engines/braveapi.py
+++ b/searx/engines/braveapi.py
@@ -64,7 +64,7 @@ time_range_map = {"day": "past_day", "week": "past_week", "month": "past_month",
"""Mapping of SearXNG time ranges to Brave API time ranges."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
"""Initialize the engine."""
if not api_key:
raise SearxEngineAPIException("No API key provided")
diff --git a/searx/engines/chinaso.py b/searx/engines/chinaso.py
index ec9951c1e..7d19fa72b 100644
--- a/searx/engines/chinaso.py
+++ b/searx/engines/chinaso.py
@@ -78,7 +78,7 @@ time_range_dict = {'day': '24h', 'week': '1w', 'month': '1m', 'year': '1y'}
base_url = "https://www.chinaso.com"
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if chinaso_news_source not in t.get_args(ChinasoNewsSourceType):
raise ValueError(f"Unsupported news source: {chinaso_news_source}")
diff --git a/searx/engines/command.py b/searx/engines/command.py
index 29950ae4e..afeaa3744 100644
--- a/searx/engines/command.py
+++ b/searx/engines/command.py
@@ -74,6 +74,7 @@ Implementations
===============
"""
+import typing as t
import re
from os.path import expanduser, isabs, realpath, commonprefix
from shlex import split as shlex_split
@@ -100,7 +101,7 @@ _command_logger = logger.getChild('command')
_compiled_parse_regex = {}
-def init(engine_settings):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
check_parsing_options(engine_settings)
if 'command' not in engine_settings:
diff --git a/searx/engines/dogpile.py b/searx/engines/dogpile.py
index c4d4bb318..96e101479 100644
--- a/searx/engines/dogpile.py
+++ b/searx/engines/dogpile.py
@@ -36,7 +36,7 @@ base_url = "https://www.dogpile.com"
safe_search_map = {0: "none", 1: "moderate", 2: "heavy"}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if dogpile_categ not in ("search", "images", "videos", "news"):
raise ValueError("invalid search type: %s" % dogpile_categ)
diff --git a/searx/engines/duckduckgo_extra.py b/searx/engines/duckduckgo_extra.py
index 3ea140161..e3042183e 100644
--- a/searx/engines/duckduckgo_extra.py
+++ b/searx/engines/duckduckgo_extra.py
@@ -47,7 +47,7 @@ _HTTP_User_Agent: str = gen_useragent()
send_accept_language_header = False
-def init(engine_settings: dict[str, t.Any]):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if engine_settings["ddg_category"] not in ["images", "videos", "news"]:
raise ValueError(f"Unsupported DuckDuckGo category: {engine_settings['ddg_category']}")
diff --git a/searx/engines/elasticsearch.py b/searx/engines/elasticsearch.py
index 382a52dd9..8ff6fcf67 100644
--- a/searx/engines/elasticsearch.py
+++ b/searx/engines/elasticsearch.py
@@ -41,6 +41,7 @@ authentication configured to read from ``my-index`` index.
"""
+import typing as t
from json import loads, dumps
from searx.exceptions import SearxEngineAPIException
from searx.result_types import EngineResults
@@ -68,7 +69,7 @@ show_metadata = False
page_size = 10
-def init(engine_settings):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if 'query_type' in engine_settings and engine_settings['query_type'] not in _available_query_types:
raise ValueError('unsupported query type', engine_settings['query_type'])
diff --git a/searx/engines/exaapi.py b/searx/engines/exaapi.py
index 7cd7ad0c1..19c079942 100644
--- a/searx/engines/exaapi.py
+++ b/searx/engines/exaapi.py
@@ -78,7 +78,7 @@ content_max_characters: int = 500
"""Maximum characters for the requested content."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not api_key:
raise SearxEngineAPIException("No API key provided")
if not 1 <= results_per_page <= 100:
diff --git a/searx/engines/fireball.py b/searx/engines/fireball.py
index c9f3ca5de..e7370038b 100644
--- a/searx/engines/fireball.py
+++ b/searx/engines/fireball.py
@@ -47,7 +47,7 @@ CACHE_VALID_DURATION = 30 * 24 * 3600 # one month, same as website
"""Duration how long settings cookies are valid."""
-def init(engine_settings: dict[str, t.Any]):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"])
diff --git a/searx/engines/gitea.py b/searx/engines/gitea.py
index ff6f95c83..50df644e6 100644
--- a/searx/engines/gitea.py
+++ b/searx/engines/gitea.py
@@ -38,6 +38,7 @@ Implementation
"""
+import typing as t
from urllib.parse import urlencode
from dateutil import parser
@@ -77,7 +78,7 @@ page_size: int = 10
"""Maximum number of results per page (default 10)."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not base_url:
raise ValueError('gitea engine: base_url is unset')
diff --git a/searx/engines/huggingface.py b/searx/engines/huggingface.py
index 908eb2052..6fcf2b889 100644
--- a/searx/engines/huggingface.py
+++ b/searx/engines/huggingface.py
@@ -33,6 +33,7 @@ Implementations
"""
+import typing as t
from urllib.parse import urlencode
from datetime import datetime
@@ -62,7 +63,7 @@ huggingface_endpoint = 'models'
"""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if huggingface_endpoint not in ('datasets', 'models', 'spaces'):
raise SearxEngineAPIException(f"Unsupported Hugging Face endpoint: {huggingface_endpoint}")
diff --git a/searx/engines/invidious.py b/searx/engines/invidious.py
index c62143ffc..f57420920 100644
--- a/searx/engines/invidious.py
+++ b/searx/engines/invidious.py
@@ -8,6 +8,7 @@ No public instance offer a public API now
"""
+import typing as t
import time
import random
from urllib.parse import quote_plus, urlparse
@@ -34,7 +35,7 @@ time_range_support = True
base_url: list[str] | str = []
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not base_url:
raise ValueError("missing invidious base_url")
diff --git a/searx/engines/kagi.py b/searx/engines/kagi.py
index 85cc62c98..7189b5eb3 100644
--- a/searx/engines/kagi.py
+++ b/searx/engines/kagi.py
@@ -87,7 +87,7 @@ api_key = ""
"""Kagi API key. Required for using this engine."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not api_key:
raise ValueError("api_key is required for using kagi")
diff --git a/searx/engines/luxxle.py b/searx/engines/luxxle.py
index a25b64efe..a7bc71f09 100644
--- a/searx/engines/luxxle.py
+++ b/searx/engines/luxxle.py
@@ -51,7 +51,7 @@ enable_http2 = False
safe_search_map = {0: "Off", 1: "Moderate", 2: "Strict"}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if luxxle_categ not in ("search", "images", "videos", "news"):
raise ValueError("invalid luxxle category: %s" % luxxle_categ)
diff --git a/searx/engines/marginalia.py b/searx/engines/marginalia.py
index 76090d8cd..510770691 100644
--- a/searx/engines/marginalia.py
+++ b/searx/engines/marginalia.py
@@ -164,7 +164,7 @@ def response(resp: SXNG_Response):
return res
-def init(_: dict[str, t.Any]):
+def setup(_: dict[str, t.Any]) -> bool:
if not api_key:
logger.error("missing api_key: see https://about.marginalia-search.com/article/api")
diff --git a/searx/engines/mariadb_server.py b/searx/engines/mariadb_server.py
index 5c0684825..6ec114bcd 100644
--- a/searx/engines/mariadb_server.py
+++ b/searx/engines/mariadb_server.py
@@ -26,6 +26,8 @@ Implementations
"""
+import typing as t
+
try:
import mariadb # pyright: ignore [reportMissingImports]
except ImportError:
@@ -60,15 +62,17 @@ paging = True
_connection = None
-def init(engine_settings):
- global _connection # pylint: disable=global-statement
-
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if 'query_str' not in engine_settings:
raise ValueError('query_str cannot be empty')
if not engine_settings['query_str'].lower().startswith('select '):
raise ValueError('only SELECT query is supported')
+
+def init(_):
+ global _connection # pylint: disable=global-statement
+
_connection = mariadb.connect(database=database, user=username, password=password, host=host, port=port)
diff --git a/searx/engines/meilisearch.py b/searx/engines/meilisearch.py
index 7520adb06..827df38e1 100644
--- a/searx/engines/meilisearch.py
+++ b/searx/engines/meilisearch.py
@@ -35,7 +35,7 @@ Here is a simple example to query a Meilisearch instance:
"""
# pylint: disable=global-statement
-
+import typing as t
from json import dumps
from searx.result_types import EngineResults
from searx.extended_types import SXNG_Response
@@ -49,7 +49,7 @@ categories = ['general']
paging = True
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if index == '':
raise ValueError('index cannot be empty')
diff --git a/searx/engines/mojeek.py b/searx/engines/mojeek.py
index fbfe5ba0a..3dfbf00c5 100644
--- a/searx/engines/mojeek.py
+++ b/searx/engines/mojeek.py
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Mojeek (general, images, news)"""
+import typing as t
from datetime import datetime
from urllib.parse import urlencode
@@ -51,7 +52,7 @@ region_param = "arc"
_delta_kwargs = {"day": "days", "week": "weeks", "month": "months", "year": "years"}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if search_type not in ("", "images", "news"):
raise ValueError(f"Invalid search type {search_type}")
diff --git a/searx/engines/mrs.py b/searx/engines/mrs.py
index c4bb54eb8..c095ad911 100644
--- a/searx/engines/mrs.py
+++ b/searx/engines/mrs.py
@@ -19,6 +19,7 @@ Implementation
==============
"""
+import typing as t
from urllib.parse import quote_plus
about = {
@@ -37,7 +38,7 @@ matrix_url = "https://matrix.to"
page_size = 20
-def init(engine_settings): # pylint: disable=unused-argument
+def setup(_: dict[str, t.Any]) -> bool | None:
"""The ``base_url`` must be set in the configuration, if ``base_url`` is not
set, a :py:obj:`ValueError` is raised during initialization.
diff --git a/searx/engines/mysql_server.py b/searx/engines/mysql_server.py
index 016fd036f..985aa0611 100644
--- a/searx/engines/mysql_server.py
+++ b/searx/engines/mysql_server.py
@@ -25,6 +25,8 @@ Implementations
"""
+import typing as t
+
from searx.result_types import EngineResults
try:
@@ -60,15 +62,17 @@ paging = True
_connection = None
-def init(engine_settings):
- global _connection # pylint: disable=global-statement
-
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if 'query_str' not in engine_settings:
raise ValueError('query_str cannot be empty')
if not engine_settings['query_str'].lower().startswith('select '):
raise ValueError('only SELECT query is supported')
+
+def init(_):
+ global _connection # pylint: disable=global-statement
+
_connection = mysql.connector.connect(
database=database,
user=username,
diff --git a/searx/engines/naver.py b/searx/engines/naver.py
index 74b4ec54d..ca0123095 100644
--- a/searx/engines/naver.py
+++ b/searx/engines/naver.py
@@ -2,6 +2,8 @@
# pylint: disable=line-too-long
"""Naver for SearXNG"""
+import typing as t
+
from urllib.parse import urlencode
from lxml import html
@@ -67,7 +69,7 @@ naver_category_dict = {
}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if naver_category not in ('general', 'images', 'news', 'videos'):
raise SearxEngineAPIException(f"Unsupported category: {naver_category}")
diff --git a/searx/engines/pexels.py b/searx/engines/pexels.py
index d25e5903e..82d4d702a 100644
--- a/searx/engines/pexels.py
+++ b/searx/engines/pexels.py
@@ -2,6 +2,7 @@
"""Pexels (images)"""
import re
+import typing as t
from urllib.parse import urlencode
from lxml import html
@@ -46,9 +47,10 @@ CACHE: EngineCache
enable_http2 = False
-def init(engine_settings):
+def setup(engine_settings: dict[str, t.Any]) -> bool:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"])
+ return True
def _get_secret_key():
diff --git a/searx/engines/postgresql.py b/searx/engines/postgresql.py
index 78af8783c..5b39f924d 100644
--- a/searx/engines/postgresql.py
+++ b/searx/engines/postgresql.py
@@ -21,6 +21,8 @@ Implementations
"""
+import typing as t
+
try:
import psycopg2 # type: ignore
except ImportError:
@@ -55,15 +57,17 @@ paging = True
_connection = None
-def init(engine_settings):
- global _connection # pylint: disable=global-statement
-
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if 'query_str' not in engine_settings:
raise ValueError('query_str cannot be empty')
if not engine_settings['query_str'].lower().startswith('select '):
raise ValueError('only SELECT query is supported')
+
+def init(_):
+ global _connection # pylint: disable=global-statement
+
_connection = psycopg2.connect(
database=database,
user=username,
diff --git a/searx/engines/privacywall.py b/searx/engines/privacywall.py
index ac492d71a..2dde35b2d 100644
--- a/searx/engines/privacywall.py
+++ b/searx/engines/privacywall.py
@@ -61,7 +61,7 @@ video_page_map = {
}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if privacywall_category not in ("general", "images", "videos"):
raise ValueError("invalid category: %s" % privacywall_category)
diff --git a/searx/engines/quark.py b/searx/engines/quark.py
index e51fb7a26..91888a935 100644
--- a/searx/engines/quark.py
+++ b/searx/engines/quark.py
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Quark (Shenma) search engine for searxng"""
+import typing as t
from urllib.parse import urlencode
from datetime import datetime
import re
@@ -43,7 +44,7 @@ def is_alibaba_captcha(html):
return bool(re.search(CAPTCHA_PATTERN, html))
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if quark_category not in ('general', 'images'):
raise SearxEngineAPIException(f"Unsupported category: {quark_category}")
diff --git a/searx/engines/resulthunter.py b/searx/engines/resulthunter.py
index ba3714129..8de08502d 100644
--- a/searx/engines/resulthunter.py
+++ b/searx/engines/resulthunter.py
@@ -42,7 +42,7 @@ resulthunter_categ = "web"
"""Supported categories are ``web`` and ``images``."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if resulthunter_categ not in ("web", "images"):
raise ValueError("invalid category: %s" % resulthunter_categ)
diff --git a/searx/engines/s1search.py b/searx/engines/s1search.py
index 754cc6dde..f2e22d1b3 100644
--- a/searx/engines/s1search.py
+++ b/searx/engines/s1search.py
@@ -38,12 +38,10 @@ CACHE: EngineCache
"""Cache to store verification tokens for pagination."""
-def init(_):
+def setup(engine_settings: dict[str, t.Any]) -> bool:
if not base_url:
raise ValueError("base_url must be set")
-
-def setup(engine_settings: dict[str, t.Any]) -> bool:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"])
return True
diff --git a/searx/engines/solr.py b/searx/engines/solr.py
index b23cbe92e..3e0388d85 100644
--- a/searx/engines/solr.py
+++ b/searx/engines/solr.py
@@ -28,7 +28,7 @@ This is an example configuration for searching in the collection
"""
# pylint: disable=global-statement
-
+import typing as t
from urllib.parse import urlencode
from searx.exceptions import SearxEngineAPIException
from searx.result_types import EngineResults
@@ -46,7 +46,7 @@ _search_url = ''
paging = True
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if collection == '':
raise ValueError('collection cannot be empty')
diff --git a/searx/engines/soundcloud.py b/searx/engines/soundcloud.py
index b3819807d..4066c9165 100644
--- a/searx/engines/soundcloud.py
+++ b/searx/engines/soundcloud.py
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""SoundCloud is a German audio streaming service."""
+import typing as t
import re
import datetime
@@ -115,9 +116,10 @@ def response(resp):
return results
-def init(engine_settings): # pylint: disable=unused-argument
+def setup(engine_settings: dict[str, t.Any]) -> bool:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"]) # type:ignore
+ return True
def get_client_id() -> str | None:
diff --git a/searx/engines/sqlite.py b/searx/engines/sqlite.py
index 45649cdc4..fe7f6f91a 100644
--- a/searx/engines/sqlite.py
+++ b/searx/engines/sqlite.py
@@ -66,7 +66,7 @@ limit = 10
paging = True
-def init(engine_settings):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
if 'query_str' not in engine_settings:
raise ValueError('query_str cannot be empty')
diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py
index b04d1e25b..6a517f3d0 100644
--- a/searx/engines/startpage.py
+++ b/searx/engines/startpage.py
@@ -165,7 +165,7 @@ CACHE: EngineCache
seconds."""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
global CACHE # pylint: disable=global-statement
# hint: all three startpage engines (WEB, Images & News) can/should use the
diff --git a/searx/engines/startpagina.py b/searx/engines/startpagina.py
index 31b007316..770990735 100644
--- a/searx/engines/startpagina.py
+++ b/searx/engines/startpagina.py
@@ -39,7 +39,7 @@ page_size = 10
api_url = "https://search.kompas.services"
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if startpagina_categ not in ("web", "images", "videos", "news"):
raise ValueError("invalid search type: %s" % startpagina_categ)
diff --git a/searx/engines/swisscows.py b/searx/engines/swisscows.py
index 65d846b56..97208a08c 100644
--- a/searx/engines/swisscows.py
+++ b/searx/engines/swisscows.py
@@ -152,7 +152,7 @@ def generate_nonce_and_signature(base_path: str, args: dict[str, t.Any]) -> tupl
maximum_page_size = {"web": 20, "images": 50, "videos": 10}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if swisscows_category not in ("web", "images", "videos"):
raise ValueError("illegal swisscows category: %s" % swisscows_category)
diff --git a/searx/engines/tiger.py b/searx/engines/tiger.py
index bf89d62ff..a7b429a89 100644
--- a/searx/engines/tiger.py
+++ b/searx/engines/tiger.py
@@ -45,12 +45,10 @@ CACHE: EngineCache
"""Cache to store session codes (result of solved CAPTCHA)."""
-def init(_):
+def setup(engine_settings: dict[str, t.Any]) -> bool:
if tiger_category not in ("Websuche", "News"):
raise ValueError("invalid search category: %s" % tiger_category)
-
-def setup(engine_settings: dict[str, t.Any]) -> bool:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"])
return True
diff --git a/searx/engines/tonline.py b/searx/engines/tonline.py
index 328b42d69..04fb34250 100644
--- a/searx/engines/tonline.py
+++ b/searx/engines/tonline.py
@@ -44,7 +44,7 @@ tonline_channel_map = {"images": "flickr", "videos": "yt"}
language = "de"
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if tonline_categ not in ("web", "images", "videos", "news"):
raise ValueError("invalid category: %s" % tonline_categ)
diff --git a/searx/engines/torznab.py b/searx/engines/torznab.py
index 1c9458237..c1bda04e2 100644
--- a/searx/engines/torznab.py
+++ b/searx/engines/torznab.py
@@ -83,7 +83,7 @@ show_torrent_files: bool = False
show_magnet_links: bool = True
-def init(engine_settings=None): # pylint: disable=unused-argument
+def setup(_: dict[str, t.Any]) -> bool | None:
"""Initialize the engine."""
if len(base_url) < 1:
raise ValueError('missing torznab base_url')
diff --git a/searx/engines/tubearchivist.py b/searx/engines/tubearchivist.py
index 614e7f6d8..765152f3a 100644
--- a/searx/engines/tubearchivist.py
+++ b/searx/engines/tubearchivist.py
@@ -75,6 +75,7 @@ Implementations
"""
+import typing as t
from urllib.parse import urlencode
from dateutil.parser import parse
from searx.utils import html_to_text, humanize_number
@@ -115,7 +116,7 @@ def absolute_url(relative_url):
return f'{base_url.rstrip("/")}{relative_url}'
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if not base_url:
raise ValueError('tubearchivist engine: base_url is unset')
if not ta_token:
diff --git a/searx/engines/tusksearch.py b/searx/engines/tusksearch.py
index e17881c08..eb1765acc 100644
--- a/searx/engines/tusksearch.py
+++ b/searx/engines/tusksearch.py
@@ -39,7 +39,7 @@ tusk_categ = "web"
api_url = "https://api.tusksearch.com"
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if tusk_categ not in ("web", "images", "videos", "news"):
raise ValueError("invalid search type: %s" % tusk_categ)
diff --git a/searx/engines/vuhuv.py b/searx/engines/vuhuv.py
index b602305b6..fe19aa109 100644
--- a/searx/engines/vuhuv.py
+++ b/searx/engines/vuhuv.py
@@ -38,7 +38,7 @@ vuhuv_category = "general"
category_map = {"general": 1, "images": 2, "videos": 3}
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
if vuhuv_category not in category_map:
raise ValueError("invalid category: %s" % vuhuv_category)
diff --git a/searx/engines/wolframalpha_noapi.py b/searx/engines/wolframalpha_noapi.py
index c001b5c06..3eb348cd4 100644
--- a/searx/engines/wolframalpha_noapi.py
+++ b/searx/engines/wolframalpha_noapi.py
@@ -3,7 +3,7 @@
Wolfram|Alpha (Science)
"""
-
+import typing as t
from json import loads
from urllib.parse import urlencode
@@ -51,7 +51,7 @@ CACHE: EngineCache
seconds."""
-def init(engine_settings):
+def setup(engine_settings: dict[str, t.Any]) -> bool | None:
global CACHE # pylint: disable=global-statement
CACHE = EngineCache(engine_settings["name"]) # type:ignore
diff --git a/searx/engines/yacy.py b/searx/engines/yacy.py
index 91d7f3a61..4686c8be6 100644
--- a/searx/engines/yacy.py
+++ b/searx/engines/yacy.py
@@ -52,7 +52,7 @@ Implementations
"""
# pylint: disable=fixme
-
+import typing as t
import random
from json import loads
from urllib.parse import urlencode
@@ -102,7 +102,7 @@ selected randomly.
"""
-def init(_):
+def setup(_: dict[str, t.Any]) -> bool | None:
valid_types = [
'text',
'image',
diff --git a/tests/unit/engines/test_command.py b/tests/unit/engines/test_command.py
index eab530ff4..b63d6fe26 100644
--- a/tests/unit/engines/test_command.py
+++ b/tests/unit/engines/test_command.py
@@ -152,7 +152,7 @@ commit '''
'date': r'Date: .*',
'message': r'\n\n.*$',
}
- git_log_engine.init({"command": git_log_engine.command, "parse_regex": git_log_engine.parse_regex})
+ git_log_engine.setup({"command": git_log_engine.command, "parse_regex": git_log_engine.parse_regex})
expected_results = [
{
'commit': '35f9a8c81d162a361b826bbcd4a1081a4fbe76a7',