【问题标题】:How to add Activate/Deactivate feature in yapsy module如何在 yapsy 模块中添加激活/停用功能
【发布时间】:2017-06-27 17:52:50
【问题描述】:

目标: 我想在基于 yapsy 模块的应用程序中添加激活/停用功能,以及实现它的正确方法是什么。

说明 我有一个 python 应用程序,它可以从 Jira、Slack 等不同的 api 中获取用户。我已经使用 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 可用于此目的,但找不到一些好的示例。至少有一个例子对我来说是很好的开始

【问题讨论】:

    标签: python plugins


    【解决方案1】:

    tldr:getAllPlugins 方法返回具有_PluInfo_details 属性的PlugInfo 对象,即configparser.Configparser 对象(doc)。 yapsy info 文件中的所有信息都可以在此处访问。

    首先是文件夹结构

    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)

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 2021-10-29
      • 2013-10-15
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多