扩展 StoryBoard:概述

StoryBoard 提供了许多扩展点,允许您根据自己的需求自定义其功能。所有这些都使用 stevedore 实现,因此安装它们简单、直接且独立于 storyboard 核心库。StoryBoard 本身也利用这些扩展点,提供了一些“分支内”插件,您可以将其用作自己的工作模板。

入门

注册您的扩展

Stevedore 使用 setup entry point 钩子来确定哪些插件可用。首先,您应该在 setup.cfg 文件中注册您的实现类。例如

[entry_points]
storyboard.plugin.user_preferences =
     my-plugin-config = my.namespace.plugin:UserPreferences
storyboard.plugin.worker =
     my-plugin-worker = my.namespace.plugin:EventWorker
storyboard.plugin.cron =
     my-plugin-cron = my.namespace.plugin:CronWorker

配置和启用您的扩展

每种插件类型都建立在 storyboard.plugin.base:PluginBase 之上,它支持您的插件配置。创建时,storyboard 的全局配置会作为 config 属性注入到插件中。有了这个对象,开发者需要实现 enabled() 方法,该方法会告知 storyboard 它拥有运行所需的一切。

一个基本的插件示例

class BasicPlugin(PluginBase):

    def enabled(self):
        return self.config.my_config_property

每个扩展钩子也可能添加自己的需求,这些需求将在下面详细说明。

可用的扩展点

用户偏好设置

最简单,也许是最重要的扩展点,允许您将默认偏好设置注入到 storyboard 中。这些将通过 API 提供给 webclient 使用,但是您需要自己消费这些偏好设置

[entry_points]
storyboard.plugin.user_preferences =
     my-plugin-config = my.namespace.plugin:UserPreferences

要学习如何编写用户偏好设置插件,请贡献到此文档。

Cron Worker

您经常需要在 storyboard 中执行基于时间、重复的操作,例如维护。通过创建和安装 cron 插件,StoryBoard 将为您管理和维护您的 crontab 注册

[entry_points]
storyboard.plugin.cron =
     my-plugin-cron = my.namespace.plugin:CronWorker

要学习如何编写 cron 插件,请参阅 扩展 StoryBoard:Cron 插件

Event Worker

如果您希望您的插件对 storyboard 中的特定 API 事件做出反应,您可以编写一个插件来执行此操作。每当 API 上发生 POST、PUT 或 DELETE 操作时,此插件都会收到通知,并且您的插件可以决定如何在异步线程中处理每个事件,这不会影响 API 的稳定性

[entry_points]
storyboard.plugin.worker =
     my-plugin-worker = my.namespace.plugin:EventWorker

要学习如何编写 event worker 插件,请在此处了解更多信息