跳转到主要内容

HookMan是一个Python包,为应用程序提供插件管理系统,特别是那些完全或部分用C++编写的应用程序。

项目描述

HookMan

https://img.shields.io/pypi/v/python-hookman.svg https://img.shields.io/conda/vn/conda-forge/python-hookman.svg https://img.shields.io/pypi/pyversions/python-hookman.svg https://codecov.io/gh/ESSS/hookman/branch/master/graph/badge.svg https://github.com/ESSS/hookman/workflows/Hookman%20-%20CI/badge.svg Documentation Status

本文档涵盖了HookMan的使用和API。

有关HookMan的信息,请参阅上面的部分。有关公共变更日志和项目维护方式,请查看GitHub页面

什么是HookMan?

HookMan 是一个Python包,为应用程序提供插件管理系统,尤其是那些全部或部分用C++编写的应用程序。

它允许外部贡献者实现插件,这些插件作为C/C++编写的扩展,通过定义良好的钩子与应用程序交互。

这个系统在很大程度上受到 pluggy 的启发,它是pytesttoxdevpi 的插件系统,但目的是从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 ⇨ 安装应用程序的人。

阅读文档以获取更多信息!

致谢

感谢 pluggy,这是一个类似的项目(插件系统)和许多想法的来源。

本包是用 Cookiecutteraudreyr/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 (48.7 kB 查看散列)

上传时间:

构建分布

python_hookman-0.5.0-py3-none-any.whl (22.0 kB 查看散列)

上传时间: Python 3

由以下机构支持

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