跳转到主要内容

简单的插件系统

项目描述

extensions 是一个简单的插件系统,灵感来源于setuptools入口点 [1]。它允许应用程序定义和使用插件。

如何定义一个插件

插件可以是任何可调用的对象。它必须通过 extensions 注册来注册。

例如,让我们以一个简单的函数为例,该函数计算一些数字的平均值,并将其保存在一个名为 extensions.py 的文件中,该文件位于名为 myapp 的包中

def average(*args):
     return sum(args) / len(args)

此函数可以使用 register 函数注册到插件系统中。插件有一个 名称 并属于一个 。在我们的例子中,组可以是 myapp.operator,名称为 average

from extensions import register

# usage : register(group, name, location)
register('myapp.operator', 'average', 'myapp.extensions:average')

第三个参数给出了可调用的位置,形式为 module_name:attrs,其中 module_name 是模块的全名,attrs 是模块中的属性。

请注意,组名包含包名,这是一个良好的实践,可以避免冲突,因为组名对所有使用 extensions 的应用程序都是全局的。

使用配置文件

还有另一种方法可以通过配置文件注册插件。您可以编写一个类似于ini的文件,使用组作为节标题,使用 name = location 作为值。

例如,如果您创建一个包含以下内容的 operators.cfg 文件

[myapp.operator]

average = myapp.extensions:average

您将能够使用 register_file 加载它

from extensions import register_file

register_file('operators.cfg')

此函数将扫描您的文件并为您注册插件。

如何使用一个插件

遍历已注册的插件

extensions 提供了一个 get 函数,允许您遍历特定组的所有已注册插件

from extensions import get

for plugin in get(group='myapp.operator'):
    print plugin.name

您也可以将 name 传递给该函数

for plugin in get(group='myapp.operator', name='average'):
     print plugin.name

或者遍历 所有 插件

from itertools import islice

for plugin in islice(get(), 5):
    print plugin.name

插件对象

get 函数返回的对象是 Plugin 类的实例。

Plugin 类提供了一个名为 load 的方法,该方法返回已注册的对象,因此您可以使用它

# let's get the plugin `average` of the group `myapp.operator`
plugin = get(group='myapp.operator', name='average').next()

# let's load it
func = plugin.load()

# let's use it now
average = func(1, 2, 3)

插件还提供了一个 name 和一个 group 属性,分别对应注册插件的 name 和其 group

分发你的插件

如果您想分发您的插件,只需将注册插件的模块导入到您的 setup.py 文件中

from distutils.core import setup
from myapp import plugins  # registers the plugins

setup(name='myapp', version='1.0'
      packages=['myapp'])

这将通过在安装包时创建一个名为 PLUGINS 的特殊文件,将其放置在安装您的包时创建的 .egg-info 目录中,来注册插件。

与setuptools入口点的兼容性

extensions 与 setuptools 入口点完全兼容。因此,您可以使用安装到 Python 中的第三方应用程序中定义的入口点进行迭代和使用。

如果您想遍历 setuptools 入口点,请在调用 get 函数时使用 consume_entry_points 选项。

plugins = get(consume_entry_points=True)

这将遍历 extensions 插件和 setuptools 入口点。

参考

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

extensions-0.4.tar.gz (16.1 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面