HookMan是一个Python包,为应用程序提供插件管理系统,特别是那些完全或部分用C++编写的应用程序。
项目描述
HookMan
本文档涵盖了HookMan的使用和API。
有关HookMan的信息,请参阅上面的部分。有关公共变更日志和项目维护方式,请查看GitHub页面
什么是HookMan?
HookMan 是一个Python包,为应用程序提供插件管理系统,尤其是那些全部或部分用C++编写的应用程序。
它允许外部贡献者实现插件,这些插件作为C/C++编写的扩展,通过定义良好的钩子与应用程序交互。
这个系统在很大程度上受到 pluggy 的启发,它是pytest、tox 和 devpi 的插件系统,但目的是从C++应用程序而不是Python应用程序中进行调用。
它旨在简化应用程序开发,允许以清晰的方式公开钩子,并允许在不访问应用程序中的类或数据的情况下开发插件。
使用 HookMan,您的应用程序可以像以下示例那样访问插件上实现的钩子。
# Initializing a class
hm = HookMan(specs=acme_specs, plugin_dirs=['path1','path2'])
hook_caller = hm.get_hook_caller()
# Getting access to the hook implementation
friction_factor = hook_caller.friction_factor()
env_temperature = hook_caller.env_temperature()
# Checking if the hook was implemented
assert friction_factor is not None
assert env_temperature is None
# Executing the hook, wherever it is implemented either in plugin A or B.
ff_result = friction_factor(1, 2.5)
env_tmp_result = env_temperature(35.5, 45.5)
它是如何工作的?
为了在您的应用程序中使用 HookMan,需要通过配置对象告知哪些 Hooks 可以实现。
有了这个配置定义,用户可以创建实现可用 Hooks 的插件,扩展应用程序的行为。
所有告知给您的应用程序的插件将通过HookMan进行验证(以检查哪些钩子已实现),并将包含对 Hooks 的引用的对象传递给应用程序。
HookMan 项目使用库 pybind11 在Python和C/C++之间进行交互,允许调用函数的人(无论是Python还是C++)以简单的方式使用。
定义一些术语
Application ⇨ 提供扩展的程序。
Hook ⇨ 应用程序的扩展。
Plugin ⇨ 实现钩子的程序。
User ⇨ 安装应用程序的人。
免费软件:MIT许可
致谢
感谢 pluggy,这是一个类似的项目(插件系统)和许多想法的来源。
本包是用 Cookiecutter 和 audreyr/cookiecutter-pypackage 项目模板创建的。
历史
0.5.0 (2023-02-10)
允许在创建的hmplugin文件中添加一些额外的文本。
0.4.0 (2020-10-23)
删除插件时,它们首先被移动到.trash目录,而不是直接删除。
允许HookManager调用特定插件的钩子。
0.3.0 (2019-12-16)
将install_plugin方法中的参数dst_path重命名为dest_path。
当安装成功时,install_plugin现在返回插件的名称。
在加载库之前,将库路径目录添加到PATH环境变量中(仅限Windows)。
在插件定义yaml中添加了可选的“extras”条目
“extras”是一个字典,用于添加(键,值)自定义选项,可在PluginInfo.extras中访问;
插件生成接受一个包含要添加到extras中的默认(键,值)对的字典;
0.2.0 (2019-02-08)
将加载钩子函数代码移动到由C++实现的HookCaller.load_impls_from_library函数中。这允许在以Python不是其入口点的项目中使用钩子功能。
HookSpecs现在接受一个extra_includes参数,可用于向生成的HookCaller.hpp文件添加自定义#include指令。
HookCaller现在包含一个与插件实现绑定的函数的std::vector。这允许多个插件实现相同的钩子;每个调用结果的行文行为是调用者的责任。
因此,以下类/方法已被删除,因为它们不再相关
ConflictBetweenPluginsError
ConflictStatus
HookMan.ensure_is_valid
HookMan.get_status
生成的文件现在带有“不要修改”的注释标题。
如果未定义specs.pyd_name,则跳过生成HookCaller的绑定代码。
通过以下命令直接在命令行中进行代码生成
python -m hookman generate-plugin-template
python -m hookman generate-project-files
python -m hookman generate-hook-specs-h
python -m hookman package-plugin
在hook_specs.h文件中显式声明extern "C"调用约定。
INIT_HOOKS宏已被删除,因为它没有任何有用的功能。
0.1.7 (2018-08-23)
首次在PyPI上发布。
0.1.6 (2018-08-23)
从未发布,部署错误。
0.1.5 (2018-08-23)
从未发布,部署错误。
0.1.4 (2018-08-23)
从未发布,部署错误。
0.1.3 (2018-08-23)
从未发布,部署错误。
0.1.2 (2018-08-23)
从未发布,部署错误。
0.1.1 (2018-08-23)
从未发布,部署错误。
放弃bumperversion并使用setuptool_scm
0.1.0 (2018-08-23)
从未发布,部署错误。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪一个,请了解有关安装包的更多信息。
源分布
构建分布
python-hookman-0.5.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6f009e6b944af847425121aa147483652c79f26c81ac51da1db0f98811681562 |
|
MD5 | 75b6277caa1c3d6ba4f4feb9be7e7a35 |
|
BLAKE2b-256 | c07d7b8ea79998e0a540c2f97ef62041b8e6d666a5718d2e06f99e2d6eafe8fe |
python_hookman-0.5.0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 317d662d1b05078af0290e6b2e66be8aba2a096588f6c1c3993a119df82e6924 |
|
MD5 | 4e14a98d96f20d5b6bc43696a4bfbeff |
|
BLAKE2b-256 | 69c279d18d6ad4e9a28dedc0de3b83b7f955ddef5ac280eb8b15d784ea74d709 |