69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
""".. sidebar:: Further reading ..
|
|
|
|
- :ref:`plugins admin`
|
|
- :ref:`SearXNG settings <settings plugins>`
|
|
- :ref:`builtin plugins`
|
|
|
|
Plugins can extend or replace functionality of various components of SearXNG.
|
|
Here is an example of a very simple plugin that adds a "Hello" into the answer
|
|
area:
|
|
|
|
.. code:: python
|
|
|
|
from flask_babel import gettext as _
|
|
from searx.plugins import Plugin
|
|
from searx.result_types import Answer
|
|
|
|
class MyPlugin(Plugin):
|
|
|
|
id = "self_info"
|
|
default_on = True
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
info = PluginInfo(id=self.id, name=_("Hello"), description=_("demo plugin"))
|
|
|
|
def post_search(self, request, search):
|
|
return [ Answer(answer="Hello") ]
|
|
|
|
Entry points (hooks) define when a plugin runs. Right now only three hooks are
|
|
implemented. So feel free to implement a hook if it fits the behaviour of your
|
|
plugin / a plugin doesn't need to implement all the hooks.
|
|
|
|
- pre search: :py:obj:`Plugin.pre_search`
|
|
- post search: :py:obj:`Plugin.post_search`
|
|
- on each result item: :py:obj:`Plugin.on_result`
|
|
|
|
For a coding example have a look at :ref:`self_info plugin`.
|
|
|
|
----
|
|
|
|
.. autoclass:: Plugin
|
|
:members:
|
|
|
|
.. autoclass:: PluginInfo
|
|
:members:
|
|
|
|
.. autoclass:: PluginStorage
|
|
:members:
|
|
|
|
.. autoclass:: searx.plugins._core.ModulePlugin
|
|
:members:
|
|
:show-inheritance:
|
|
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
__all__ = ["PluginInfo", "Plugin", "PluginStorage"]
|
|
|
|
from ._core import PluginInfo, Plugin, PluginStorage
|
|
|
|
STORAGE: PluginStorage = PluginStorage()
|
|
|
|
|
|
def initialize(app):
|
|
STORAGE.load_builtins()
|
|
STORAGE.init(app)
|