Python 如何在yapsy模块中添加激活/停用功能
目标: 我想在基于yapsy模块的应用程序中添加激活/停用功能,以及正确的实现方式 说明 我有一个python应用程序,它从不同的API(如Jira、Slack等)获取用户。我使用yapsy模块将其作为一个可插拔的模块工作 目前我是如何实施的? 目前,我已经使用配置文件添加了激活/停用功能。在配置文件中,您可以看到一个名为status的选项。如果启用配置,则读取配置,而不是调用run()函数,否则不会Python 如何在yapsy模块中添加激活/停用功能,python,plugins,Python,Plugins,目标: 我想在基于yapsy模块的应用程序中添加激活/停用功能,以及正确的实现方式 说明 我有一个python应用程序,它从不同的API(如Jira、Slack等)获取用户。我使用yapsy模块将其作为一个可插拔的模块工作 目前我是如何实施的? 目前,我已经使用配置文件添加了激活/停用功能。在配置文件中,您可以看到一个名为status的选项。如果启用配置,则读取配置,而不是调用run()函数,否则不会 [plugin_1] user = tara host = SERVERNAME filepa
[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()用于收集我们拥有的所有插件。是否有任何方法可以收集仅激活的插件。我已经阅读了yapsy文档,但找不到正确的方法,或者文档中的内容不清楚
通过很少的研究,我发现ConfigurablePluginManager可以用于此目的,但找不到好的例子。至少有一个例子对我来说是很好的开始tldr:
getAllPlugins
方法返回PlugInfo
对象,该对象具有\PluInfo\u 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
下面是针对该问题修改的答案示例(请参见类方法名称):
下面是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()
当一切正常时,它将打印这是插件1
注:
- 确保yapsy文件信息具有正确的扩展名。默认值为
yapsy插件
- 确保信息文件包含
部分,其中包含核心
和名称
。模块
上的值必须与插件的模块名称匹配Module
- 为了更方便地调试插件,请启用日志记录,即在下面的行中输入
import logging logging.basicConfig(level=logging.DEBUG)
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()