-
Notifications
You must be signed in to change notification settings - Fork 2.3k
[refactor] migrate plugins from "module" to class SXNGPlugin #4538
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
a79a984 to
5698e82
Compare
|
@Bnyro finished my development phase .. To understand plugin development compile documentation: and read http://0.0.0.0:8000/dev/plugins/development.html Function |
|
The |
I think it is the most flexible solution ... if there are additional URL fields at some point, additional URL fields only have to be implemented in the loop of the Result class (the caller does not have to worry about the inner logic of the Result class and what are URL-fields and what fields not). |
|
I fixed an issue; the |
Bnyro
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
Thanks for review / FYI I patched my instance with this PR .. just to see if there are any issues in production .. none seen so far .. |
This patch brings two major changes:
- ``Result.filter_urls(..)`` to pass a filter function for URL fields
- The ``enabled_plugins:`` section in SearXNG's settings do no longer exists.
To understand plugin development compile documentation:
$ make docs.clean docs.live
and read http://0.0.0.0:8000/dev/plugins/development.html
There is no longer a distinction between built-in and external plugin, all
plugins are registered via the settings in the ``plugins:`` section.
In SearXNG, plugins can be registered via a fully qualified class name. A
configuration (`PluginCfg`) can be transferred to the plugin, e.g. to activate
it by default / *opt-in* or *opt-out* from user's point of view.
built-in plugins
================
The built-in plugins are all located in the namespace `searx.plugins`.
.. code:: yaml
plugins:
searx.plugins.calculator.SXNGPlugin:
active: true
searx.plugins.hash_plugin.SXNGPlugin:
active: true
searx.plugins.self_info.SXNGPlugin:
active: true
searx.plugins.tracker_url_remover.SXNGPlugin:
active: true
searx.plugins.unit_converter.SXNGPlugin:
active: true
searx.plugins.ahmia_filter.SXNGPlugin:
active: true
searx.plugins.hostnames.SXNGPlugin:
active: true
searx.plugins.oa_doi_rewrite.SXNGPlugin:
active: false
searx.plugins.tor_check.SXNGPlugin:
active: false
external plugins
================
SearXNG supports *external plugins* / there is no need to install one, SearXNG
runs out of the box.
- Only show green hosted results: https://github.com/return42/tgwf-searx-plugins/
To get a developer installation in a SearXNG developer environment:
.. code:: sh
$ git clone git@github.com:return42/tgwf-searx-plugins.git
$ ./manage pyenv.cmd python -m \
pip install -e tgwf-searx-plugins
To register the plugin in SearXNG add ``only_show_green_results.SXNGPlugin`` to
the ``plugins:``:
.. code:: yaml
plugins:
# ...
only_show_green_results.SXNGPlugin:
active: false
Result.filter_urls(..)
======================
The ``Result.filter_urls(..)`` can be used to filter and/or modify URL fields.
In the following example, the filter function ``my_url_filter``:
.. code:: python
def my_url_filter(result, field_name, url_src) -> bool | str:
if "google" in url_src:
return False # remove URL field from result
if "facebook" in url_src:
new_url = url_src.replace("facebook", "fb-dummy")
return new_url # return modified URL
return True # leave URL in field unchanged
is applied to all URL fields in the :py:obj:`Plugin.on_result` hook:
.. code:: python
class MyUrlFilter(Plugin):
...
def on_result(self, request, search, result) -> bool:
result.filter_urls(my_url_filter)
return True
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
The
enabled_plugins:section in SearXNG's settings do no longer exists. There is no longer a distinction between built-in and external plugin, all plugins are registered via the settings in theplugins:section.To understand plugin development compile documentation:
and read http://0.0.0.0:8000/dev/plugins/development.html
In SearXNG, plugins can be registered via a fully qualified class name. A configuration (
PluginCfg) can be transferred to the plugin, e.g. to activate it by default / opt-in or opt-out from user's point of view.built-in plugins
The built-in plugins are all located in the namespace
searx.plugins.external plugins
SearXNG supports external plugins / there is no need to install one, SearXNG runs out of the box.
To get a developer installation in a SearXNG developer environment:
$ git clone git@github.com:return42/tgwf-searx-plugins.git $ ./manage pyenv.cmd python -m \ pip install -e tgwf-searx-pluginsTo register the plugin in SearXNG add
only_show_green_results.SXNGPluginto theplugins:...Result.filter_urls(..)
The
Result.filter_urls(..)can be used to filter and/or modify URL fields. In the following example, the filter functionmy_url_filter:is applied to all URL fields in the
Plugin.on_resulthook:Related