-
Notifications
You must be signed in to change notification settings - Fork 1.7k
notifier
Leo Q edited this page Oct 19, 2023
·
2 revisions
通知模块的所有代码都在 sql/notify.py
内, 大致思路如下:
- view 调用
notify_for_execute
,notify_for_audit
,notify_for_m2sql
-
notify_for_execute
等函数 调用auto_notify
-
auto_notify
读settings.ENABLED_NOTIFIERS
, notifier 格式为xxx.xxx.xxx:yyy
其中 xxx 为 python 风格的 path, yyy 为文件内的对象 - 初始化notifier 对象, 可以理解为
import yyy from xxx.xxx.xxx
我们实际来看一下一个实际的 Notifier class
class GenericWebhookNotifier(Notifier): # 继承基础的 Notifier
name = "generic_webhook"
sys_config_key: str = "generic_webhook_url" # 只有在 sys config 内配置了这个键才会真正启用
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.request_data = None
def render(self):
...
def send(self):
...
如果你需要实现一个你自定义的通知组件, 那么你可以集成 notify.py
里的 Notifier, 然后实现其中的 render
和 send
两个方法即可. 更多的请阅读 Notifier
的代码
实现完成后, 将代码挂载至 archery 目录下, 比如你的文件名是 my.py
, 挂载到 private
文件夹内, notifier 对象是 MySecretNotifier. 最终目录结构是
├── archery
│ ├── __init__.py
│ ├── __pycache__
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── private
│ ├── __init__.py
│ ├── my.py
最后设置环境变量ENABLED_NOTIFIERS
, 设置为 xxxx,private.my:MySecretNotifier
, 前面可以加上系统自带的一些 notifier , 比如 sql.notify:DingdingWebhookNotifier
, 这样 archery 就会在工单流转时自动调用你的 notifier 了
如果你想分享你的 Notifier, 欢迎提交 pr