目标: 我想在基于yapsy模块的应用程序中添加激活/取消激活功能,以及实现它的正确方法。
描述 我有一个python应用程序,可以从不同的api中获取用户,如Jira,Slack等等。我使用yapsy模块使其成为可插件。
我现在如何实施?
目前我已使用配置文件添加了激活/取消激活功能。在配置文件中,您可以看到名为status的选项。如果启用了,则读取配置而不是调用run()函数。
[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd
status = enable
插件的运行方式
savesessionname(cons.MAIN_CONFIG_PATH, session_name)
simplePluginManager = PluginManager()
simplePluginManager.setPluginPlaces(["plugins/"])
simplePluginManager.collectPlugins()
for plugininfo in simplePluginManager.getAllPlugins():
plugininfo.plugin_object.run()
在所有插件中都有 run(),它会调用并运行插件。插件会从配置中检查插件是否处于活动状态。
从yapsy采用ACTIVATE / DEACTIVATE功能的方法是什么? 插件本身,而不是我实现阅读的方式 配置并决定是否运行该功能
一些说明: simplePluginManager.collectPlugins()用于收集我们拥有的所有插件,有任何方法可以收集仅激活的插件。我已经浏览了yapsy文档,但无法从文档中找到正确的方法或不清楚
由于研究很少,我发现 ConfigurablePluginManager 可用于此目的,但无法找到一些好的示例。至少有一个例子对我来说很棒
答案 0 :(得分:0)
tldr:getAllPlugins
方法返回PlugInfo
对象,其_PluInfo_details
属性为configparser.Configparser
对象(doc)。来自yapsy信息文件的所有信息都可以在那里加入。
首先是文件夹结构
script.py
plugins
|- plugin1.yapsy-plugin
|- plugin1.py
插件信息文件:
[Core]
Name = Plugin 1
Module = plugin1
[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd
status = enable
这里是针对此问题修改的答案https://stackoverflow.com/a/5344300/1766261的示例(请参阅类方法名称):
from yapsy.IPlugin import IPlugin
class PluginOne(IPlugin):
def run(self): # this part is change from original code
print("This is plugin 1")
这是根据文件信息中的script.py
值运行插件的status
内容
from yapsy.PluginManager import PluginManager
# savesessionname(cons.MAIN_CONFIG_PATH, session_name)
simplePluginManager = PluginManager()
simplePluginManager.setPluginPlaces(["plugins"])
simplePluginManager.collectPlugins()
for plugininfo in simplePluginManager.getAllPlugins():
if plugininfo._PluginInfo__details['plugin_1']['status'] == 'enabled':
plugininfo.plugin_object.run()
当一切正确时,它会打印This is plugin 1
注意:
yapsy-plugin
core
部分,其中包含Name
和Module
。 Module
上的值必须与插件的模块名称相匹配import logging logging.basicConfig(level=logging.DEBUG)