目标:,我想在基于yapsy模块的应用程序中添加激活/停用特性,以及实现它的正确方法。
Description --我有一个python应用程序,可以从不同的apis (如Jira、Slack等)中获取用户。我已经让它作为一个插件使用yapsy模块。
我现在是如何实现的?
现在,我已经使用配置文件添加了Activate/Deactivate特性。在配置文件中,您可以看到一个名为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插件本身的激活/停用特性的方法是什么,而不是我实现读取配置并决定是否运行该函数的方式?
一些描述: simplePluginManager.collectPlugins()用于收集我们拥有的所有插件,有任何方法来收集只被激活的插件。我已经看过了这些冗长的文档,但是没有找到正确的方法,或者从文档中找不到清晰的地方。
通过很少的研究,我发现ConfigurablePluginManager可以用于这个目的,但没有找到一些好的例子来开始。至少一个例子对我来说是很好的开始
发布于 2018-05-07 23:46:26
getAllPlugins方法返回PlugInfo对象,该对象具有_PluInfo_details属性,即configparser.Configparser对象(文档)。来自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-plugincore部分,其中包含Name和Module。Module上的值必须与插件的模块名称相匹配import logging logging.basicConfig(level=logging.DEBUG)放在https://stackoverflow.com/questions/44786822
复制相似问题