``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 不受支持(一些对象功能过于受限)。
类似项目
function_trace - 非常简单
变更日志
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.diff、aspectlib.test.Story.unexpected 和 aspectlib.test.Story.missing。
添加了 aspectlib.test.Story.actual 和 aspectlib.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_methods、skip_methods、skip_magicmethods 选项替换为 methods。
将 on_init 选项重命名为 lazy。
添加了 aliases 选项。
将 skip_subclasses 选项替换为 subclasses。
修复了从字符串目标编织方法。
0.3.1 (2014-03-05)
???
0.3.0 (2014-03-05)
第一个公开版本。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。