首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在yapsy模块中添加激活/停用功能

如何在yapsy模块中添加激活/停用功能
EN

Stack Overflow用户
提问于 2017-06-27 17:52:50
回答 1查看 334关注 0票数 2

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

Description --我有一个python应用程序,可以从不同的apis (如Jira、Slack等)中获取用户。我已经让它作为一个插件使用yapsy模块。

我现在是如何实现的?

现在,我已经使用配置文件添加了Activate/Deactivate特性。在配置文件中,您可以看到一个名为status的选项。如果该配置是启用的,而不是调用run()函数,则读取它。

代码语言:javascript
复制
[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd 
status = enable

插件就是这样运行

代码语言:javascript
复制
  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可以用于这个目的,但没有找到一些好的例子来开始。至少一个例子对我来说是很好的开始

EN

回答 1

Stack Overflow用户

发布于 2018-05-07 23:46:26

getAllPlugins方法返回PlugInfo对象,该对象具有_PluInfo_details属性,即configparser.Configparser对象(文档)。来自yapsy信息文件的所有信息都可以在那里访问。

首先是文件夹结构

代码语言:javascript
复制
script.py
plugins
|- plugin1.yapsy-plugin
|- plugin1.py

插件信息文件:

代码语言:javascript
复制
[Core]
Name = Plugin 1
Module = plugin1

[plugin_1]
user = tara
host = SERVERNAME
filepath = /etc/passwd
status = enable

下面是针对此问题修改的答案https://stackoverflow.com/a/5344300/1766261的示例(请参阅类方法名称):

代码语言:javascript
复制
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内容

代码语言:javascript
复制
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
  • 确保info文件包含包含core部分,其中包含NameModuleModule上的值必须与插件的模块名称相匹配
  • 为了更容易地调试插件,启用日志记录,即将下面的行import logging logging.basicConfig(level=logging.DEBUG)放在
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44786822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档