如何在yapsy模块

时间:2017-06-27 17:52:50

标签: python plugins

目标: 我想在基于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 可用于此目的,但无法找到一些好的示例。至少有一个例子对我来说很棒

1 个答案:

答案 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文件信息具有正确的扩展名。默认值为yapsy-plugin
  • 确保信息文件包含core部分,其中包含NameModuleModule上的值必须与插件的模块名称相匹配
  • 为了更轻松地调试您的插件,启用日志记录,即放入以下行import logging logging.basicConfig(level=logging.DEBUG)