This time i focused on plugin API management. To me the best way to handle this is to use interfaces.
I wasn’t motivated enough to dig in PEAK’ PyProtocols so i picked up an ASPN recipe, did some magic-cooking and came up with a base Plugin class and an IPlugin interface. Each plugin developer shall use both this way:
from framework.plugin import IPlugin, Plugin class IFoo(IPlugin): def echo(self, message): pass class Foo(Plugin): __implements__ = IFoo def echo(self, message): return message
In the plugin loader you are now able to detect ‘false’ plugins and partially implemented plugins:
from framework.plugin import InterfaceOmission, Plugin for entrypoint in pkg_resources.iter_entry_points("my.plugins"): try: plugin_class = entrypoint.load() except InterfaceOmission, omission: print omission continue assert issubclass(plugin_class,Plugin), '%r is not a valid Plugin!' % plugin_class
I’ve put the code in the PythonFR SVN repository, hoping it would eventually be useful for anybody else than me ;-) I don’t think the code will evolve much more, it remains simple enough so that it can be reused.