跳转到主要内容

``aspectlib``是一个面向切面的编程、猴子补丁和装饰器库。当需要改变现有代码的行为时,它非常有用。它包括用于调试和测试的工具:简单的模拟/记录和完整的捕获/重放框架。

项目描述

aspectlib是一个面向切面的编程、猴子补丁和装饰器库。当需要改变现有代码的行为时,它非常有用。它包括用于调试和测试的工具:简单的模拟/记录和完整的捕获/重放框架。

  • 免费软件:BSD 2-Clause许可证

安装

pip install aspectlib

您也可以使用以下命令安装开发版本:

pip install https://github.com/ionelmc/python-aspectlib/archive/main.zip

文档

文档托管在readthedocs.org上:python-aspectlib 文档

实现状态

编织函数、方法、实例和类已完成。

待定

  • “关注点”(见 docs/todo.rst

如果 aspectlib.weave 在您的场景中不起作用,请报告一个错误!

需求

操作系统:

任何

运行时:

Python 2.6, 2.7, 3.3, 3.4 或 PyPy

Python 3.2, 3.1 和 3.0 不受支持(一些对象功能过于受限)。

类似项目

变更日志

2.0.0 (2022-10-20)

  • 停止支持旧版 Python(2.7、3.6 或更早版本)。

  • 移除 Travis/Appveyor CI 并切换到 GitHub Actions。

  • 添加了对 Tornado 6 的支持(在测试套件中)。

1.5.2 (2020-11-15)

  • 修复了 Python 3.9 上的导入错误。由 Felix Yan 在 #19 中贡献。

1.5.1 (2020-06-11)

  • v1.5.0 中移除了一些调试遗留打印。

1.5.0 (2020-04-05)

  • 修复了 weave,使其停止读取不匹配方法选择器的属性。由 Jonas Maurus 在 #14 中贡献。

  • 添加了对 Python 3.7 和 3.8 的支持(async def 函数和生成器)。

1.4.2 (2016-05-10)

  • 修复了遗忘的调试打印。

1.4.1 (2016-05-06)

  • 修复了对不在根级别模块上的对象的编织。

1.4.0 (2016-04-09)

  • 正确编织了方法,编织的函数应该是未绑定。

  • 回滚操作只应用一次撤销。

  • 为 pytest 添加了便利的 weave 固件。

1.3.3 (2015-10-02)

  • 修复了 ABSOLUTELY_ALL_METHODS 名称中的错误(现在为 ABSOLUTELY_ALL_METHODS)。旧名称仍然存在以保持向后兼容性。

1.3.2 (2015-09-22)

  • 修复了生成器建议包装器中的另一个棘手错误 - 如果只产生了 Proceed,则不会返回结果。

1.3.1 (2015-09-12)

  • 修复了在生成器中使用 Aspects 时的结果处理。

1.3.0 (2015-06-06)

  • aspectlib.test.LogCapture 添加了 messages 属性。将 call 修改为具有级别名称而不是数字。

  • 修复了在旧式类上修补方法时从 aspectlib.patch_module` 中发出的错误警告。

1.2.2 (2014-11-25)

  • aspectlib.debug.log 装饰器的 __logged__ 包装器添加了对弱引用的支持。

1.2.1 (2014-10-15)

  • 如果会有错误,则不要从 Replay.__exit__ 中抛出异常(这使得原始原因难以调试)。

1.2.0 (2014-06-24)

  • 修复了在基类中定义但在目标类上未定义的编织方法。

  • 修复了在 Story/Replay 记录中使用的错误 qualname。现在使用提供给编织器的别名,而不是当前平台上的真实名称。

1.1.1 (2014-06-14)

  • aspectlib 的每个日志记录器中使用 ASPECTLIB_DEBUG

1.1.0 (2014-06-13)

  • aspectlib.Aspect 添加了一个 bind 选项,这样您就可以从顾问处访问切点。

  • aspectlib.test.Replay 中替换了自动导入,转而提取上下文变量(从调用 aspectlib.test.Story 的局部和全局变量)。这比之前的从结果的 AST 中推断模块更有效。

  • 现在 replay 上的所有方法都是属性:aspectlib.test.Story.diffaspectlib.test.Story.unexpectedaspectlib.test.Story.missing

  • 添加了 aspectlib.test.Story.actualaspectlib.test.Story.expected

  • 添加了一个 ASPECTLIB_DEBUG 环境变量选项,以在 aspectlib 的内部启用调试日志记录。

1.0.0 (2014-05-03)

  • 重构了 aspectlib.test.Story 的内部,以保持调用顺序,允许依赖关系,并改进了序列化(用于差异和缺失/意外的列表)。

0.9.0 (2014-04-16)

  • 修改了 aspectlib.test.record

    • history 选项重命名为 calls

    • call 选项重命名为 iscalled

    • 添加了 callback 选项。

    • 添加了 extended 选项。

  • 修改了 aspectlib.weave

    • 允许在一个模块中编织一切。

    • 允许编织新式类的实例。

  • 添加了 aspectlib.test.Story 类,用于捕获-回放和存根/模拟测试。

0.8.1 (2014-04-01)

  • 为 py3support 使用更简单的导入。

0.8.0 (2014-03-31)

  • 修改 aspectlib.debug.log 以使用 aspectlib.Aspect 并与协程或生成器一起按预期工作。

  • 修复了 aspectlib.debug.log 以在 Python 3.4 上工作。

  • 删除了未记录的 aspectlib.Yield 建议它仅在装饰生成器时才可用。

0.7.0 (2014-03-28)

  • aspectlib.Aspect 中添加了对装饰生成器和协程的支持。

  • 使 aspectlib 抛出更好的异常。

0.6.1 (2014-03-22)

  • 修复了 aspectlib.debug.log 内部的检查,这些检查会意外地调用 __bool__/__nonzero

0.6.0 (2014-03-17)

  • 不要在 ALL_METHODS 中包含 __getattribute__ - 它太危险了危险危险危险危险危险危险…… ;)

  • 在 debug.log 中进行更可靠的旧式类检查

  • 在编织一个类时,不要编织可调用的属性,但不是实际上例程(函数、方法等)

0.5.0 (2014-03-16)

  • 修改了 aspectlib.debug.log

    • arguments 重命名为 call_args

    • arguments_repr 重命名为 call_args_repr

    • 添加了 call 选项。

    • 修复了从旧式方法中记录的问题(对象名称是一个通用的“实例”)。

  • 修复了编织某些内置方法的问题。

  • 允许同时应用多个方面。

  • 在编织前验证字符串目标。现在 aspectlib.weave('mod.invalid name', aspect) 会给出明确的错误(invalid name 不是一个有效的标识符)

  • 各种文档改进和示例。

0.4.1 (2014-03-08)

  • 从 0.4.0 的源分发中删除垃圾文件。

0.4.0 (2014-03-08)

  • 修改了 aspectlib.weave

    • only_methodsskip_methodsskip_magicmethods 选项替换为 methods

    • on_init 选项重命名为 lazy

    • 添加了 aliases 选项。

    • skip_subclasses 选项替换为 subclasses

  • 修复了从字符串目标编织方法。

0.3.1 (2014-03-05)

  • ???

0.3.0 (2014-03-05)

  • 第一个公开版本。

项目详情


下载文件

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

源分发

aspectlib-2.0.0.tar.gz (156.6 kB 查看哈希值)

构建分发

aspectlib-2.0.0-py3-none-any.whl (24.2 kB 查看哈希值)

上传于 Python 3

由以下支持