yapsy无法正确加载插件

时间:2011-08-08 18:11:51

标签: python plugins

我正在使用yapsy作为python应用程序。

我为我的应用编写了一个新插件并将其放入所有其他插件所在的同一文件夹中

我的插件都继承自一个名为doctypes的插件类,它通常是接口 doctype类再次从IPlugin类继承

所有插件加载正确,但对于新插件我得到:

< general.interfaces.DocType对象位于0x ......>

而不是

< PDF对象位于0x .......>

在我看来好像yapsy加载了所有插件继承的主插件类,它本身是从IPlugin继承的

我的应用程序适用于所有插件,除了新的插件我检查了代码中的任何差异,但所有事情似乎都正确

1 个答案:

答案 0 :(得分:1)

我是yapsy的主要开发者,我刚刚遇到这个消息......

虽然我猜想4个月之后你会去寻找别的东西但是无论如何。

我想指出的第一件事是,如果你在yapsy的跟踪器上填写错误报告可能是最好的:

https://sourceforge.net/tracker/?group_id=208383

如果您决定这样做,如果您还可以附加一些代码,那将对我有很大帮助。

从你在这里给出的简单描述中,我很难分辨出问题所在,但至少看来“设置”可以作为yapsy单元测试的一些小改动而再现。

如果我不得不做一个狂野的猜测,问题可能来自(非常粗略地)使用Python的'issubclass'来识别各种类别的插件。这是因为“类别”是在父类中定义的,相同类别的所有插件都必须继承(更准确地说是“继承自...的类的实例”)。

如果您使用以下内容定义类别映射,则会导致混淆:

{
"GeneralDocCategory": general.interfaces.DocType,
"PDFcategory": general.interfaces.PDFDocType
}

PDFDocType继承自DocType。问题的根源在于母班的存在以及其中一个子类来定义两个不同的类别。

解决方法可能是:

解决方案A /以更聪明的方式重新设计yapsy(由于时间剧烈缺乏但是随意分叉/贡献/改变所有内容,在yapsy的主要回购中不会很快发生)

解决方案B /定义“非特定”doc类型的“特定”类(不仅仅是一个笑话)来获取由以下内容定义的类别:

{
"UnkownDocCategory": general.interfaces.UnknownDocType,
"PDFcategory": general.interfaces.PDFDocType
}

其中UnknownDocType和PDFDocType都将继承DocType。