自定义插件¶
除了默认的内置插件外,你还可以编写自己的插件。
提示
下面将以编写一个打印插件为例,介绍如何编写一个自定义插件。也可以直接参考 自定义插件模板项目。
插件目录¶
项目下添加 plugins
目录
mkdir plugins
编写插件¶
plugins/print.py
import logging
from typing import Literal
from pydantic import Field
from auto_unpack.plugin import Plugin, PluginConfig
logger = logging.getLogger(__name__)
class PrintPluginConfig(PluginConfig):
"""
打印插件配置
"""
name: Literal["print"] = Field(
default="print",
description="打印插件"
)
message: str = Field(
default="Hello, world!",
description="打印的消息"
)
class PrintPlugin(Plugin[PrintPluginConfig]):
"""
打印插件
"""
name: str = "print"
def init(self):
"""
初始化打印插件
"""
logger.debug("init print plugin")
def execute(self):
"""
执行打印插件
"""
logger.info(self.config.message)
添加插件¶
插件添加方式多样,以下方式任选其一即可。
config/application.yaml
app:
# 添加自定义插件目录
plugins_dir: plugins
app/__main__.py
from pathlib import Path
from auto_unpack import App
from ..plugins.print import PluginConfig, PrintPlugin
if __name__ == '__main__':
app = App()
# 通过目录加载插件
app.load_plugin(Path("plugins"))
# 通过文件加载插件
app.load_plugin(Path("plugins/print.py"))
# 通过类加载插件
app.load_plugin_by_class(PluginConfig, PrintPlugin)
app.run()
使用插件¶
config/application.prod.yaml
flow:
steps:
- name: print
message: "Hello, world!"
构建约束¶
自定义插件可以构建约束,以确保插件的配置符合预期。