Skip to content

Commit

Permalink
[refactor] hostnames plugin: add fallback for old hostname_replace pl…
Browse files Browse the repository at this point in the history
…ugin

Co-authored-by: Markus Heiser <markus.heiser@darmarit.de>
  • Loading branch information
Bnyro and return42 committed Jun 7, 2024
1 parent 845a0b6 commit f5eb56b
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
35 changes: 35 additions & 0 deletions searx/plugins/hostname_replace.py
Original file line number Diff line number Diff line change
@@ -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)
35 changes: 33 additions & 2 deletions searx/plugins/hostnames.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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')

Expand Down

0 comments on commit f5eb56b

Please sign in to comment.