[refactor] hostnames plugin: add fallback for old hostname_replace plugin

Co-authored-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Bnyro 2024-05-15 16:30:49 +02:00 committed by Markus Heiser
parent 845a0b678d
commit f5eb56b63f
2 changed files with 68 additions and 2 deletions

View file

@ -0,0 +1,35 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# pylint: disable=missing-module-docstring
from flask_babel import gettext
from searx.plugins import logger
name = gettext('Hostname replace')
description = "Deprecated / contact system admin to configure 'Hostnames plugin'!!"
default_on = False
preference_section = 'general'
plugin_id = 'hostname_replace'
logger = logger.getChild(plugin_id)
REPORTED = False
def deprecated_msg():
global REPORTED # pylint: disable=global-statement
if REPORTED:
return
logger.error(
"'Hostname replace' plugin is deprecated and will be dropped soon!"
" Configure 'Hostnames plugin':"
" https://docs.searxng.org/src/searx.plugins.hostnames.html"
)
REPORTED = True
def on_result(_request, _search, result):
# pylint: disable=import-outside-toplevel, cyclic-import
from searx.plugins.hostnames import on_result as hostnames_on_result
deprecated_msg()
return hostnames_on_result(_request, _search, result)

View file

@ -3,6 +3,16 @@
"""In addition to rewriting/replace reslut URLs, the *hoostnames* plugin offers
other features.
.. attention::
The 'Hostnames plugin' from `PR-3463
<https://github.com/searxng/searxng/pull/3463>`_ is a rewrite of the
'Hostname replace' plugin. Backwards compatibility is guaranteed for a
transitional period, but this will end soon.
**To maintainers of SearXNG instances, please modify your old plugin config
to the new.**
- ``hostnames.replace``: A mapping of regular expressions to hostnames to be
replaced by other hostnames.
@ -86,8 +96,29 @@ def _load_regular_expressions(settings_key):
return {}
replacements = _load_regular_expressions('replace')
removables = _load_regular_expressions('remove')
# compatibility fallback for old hostname replace plugin
# TODO: remove in the future once most/all instance maintainers finished migrating # pylint: disable=fixme
def _load_regular_expressions_with_fallback(settings_key):
expressions = _load_regular_expressions(settings_key)
if expressions:
return expressions
# fallback to the old `hostname_replace` settings format
# pylint: disable=import-outside-toplevel, cyclic-import
hostname_replace_config = settings.get('hostname_replace', {})
if hostname_replace_config:
from searx.plugins.hostname_replace import deprecated_msg
deprecated_msg()
if settings_key == 'replace':
return {re.compile(p): r for (p, r) in hostname_replace_config.items() if r}
return {re.compile(p) for (p, r) in hostname_replace_config.items() if not r}
replacements = _load_regular_expressions_with_fallback('replace')
removables = _load_regular_expressions_with_fallback('remove')
high_priority = _load_regular_expressions('high_priority')
low_priority = _load_regular_expressions('low_priority')