延迟装饰器操作的库
项目描述
Venusian是一个库,它允许框架作者延迟装饰器操作。与在导入时执行函数(或类)装饰器时采取行动不同,您可以将装饰器通常采取的操作延迟到单独的“扫描”阶段。
请参阅包的“docs”目录或http://docs.pylonsproject.org/projects/venusian/en/latest/上的在线文档
2.0a3 (2016-01-27)
执行额外的检查以避免扫描由six插入的模块以实现Python 3兼容性。 six假设这些模块存在于Python中,但其中一些,如gdbm,无法始终编译,因此不要扫描这些模块。这个黑客实际上可能并不完全正确,因为可能由于外部的模块被忽略而内部的模块被ignore函数允许,但我们现在不会担心这种情况。
2.0a2 (2014-07-07)
注意 这可能在Venusian 1.1版本中成为标准功能;这个分支只是为了我能够在新递归选项上取得进展。
将 .scan() 方法中添加一个 递归 选项,以允许非递归地扫描包(仅扫描 __init__.py)。
将内部函数重构为单独的方法。
1.0 (2014-06-30)
修复 PyPy > 2.0 中附着的装饰器可能找不到的问题。
放弃对 Python 2.4 / 2.5 / Jython 的支持。
添加 lift 和 onlyliftedfrom 类装饰器,以允许继承附着在超类方法上的 venusian 装饰器。有关更多信息,请参阅 API 文档。
修复了一个问题,其中超类具有 venusian 装饰器的未装饰子类会继承其超类的装饰。venusian 装饰器不应隐式继承。请参阅 https://github.com/Pylons/venusian/issues/11#issuecomment-4977352
1.0a8 (2013-04-15)
将 ignore 参数递归地传递给 walk_packages,以便自定义忽略函数可以递归地忽略东西。请参阅 https://github.com/Pylons/venusian/pull/16
不再在 Python 2.4 下运行 tox 测试(tox 不再支持 2.4)。
1.0a7 (2012-08-25)
Venusian 现在可以在 Python 3.3b2+ 上运行(基于 importlib)。
使用 nose-exclude 而不是依赖脆弱的模块作用域代码,以确保在“nosetests”期间导入测试代码时不会出现错误。
错误修复:默认情况下不再抑制 ImportError。如果您想在扫描时抑制 ImportError,您现在需要使用文档中描述的 onerror 回调。
1.0a6 (2012-04-23)
如果装饰器对象被导入到其他模块中,则不要忽略其原始位置中的装饰器对象(从 venusian 扫描中删除 invoke 中的 seen 集合)。请参阅 https://github.com/Pylons/venusian/pull/13。
1.0a5 (2012-04-21)
在扫描期间忽略对象的另一种不那么糟糕的方式,这些对象只导入到模块中,但实际上并没有在那里定义。请参阅 1.0a4 更改说明以了解原因。现在,我们检查 Venusian 附件 的模块是否与正在扫描的模块匹配,而不是检查 扫描对象 的模块是否与正在扫描的模块匹配。这允许一些真正的导入对象作为 Venusian 扫描目标,同时防止对具有 venusian 附件的对象进行不适当的双重扫描,这些附件恰好被导入到其他扫描模块中。
添加 dev 和 docs setup.py 命令(类似于 Pyramid)。
1.0a4 (2012-04-16)
尝试在扫描期间忽略仅导入到模块中但未实际定义在该模块中的对象。这是一个语义变化,但这是正确的事情,因为我发现自己遇到了这种情况
# in a module named "one" from two import anotheradecoratedthing @adecorator def adecoratedthing(): pass # and scanning both modules scan('one') scan('two')
在这种情况下,您将得到“anotherdecoratedthing”的两个重复注册,这不是任何人预期的。
1.0a3 (2012-02-08)
向 Scanner 的 scan 方法添加一个 ignore 参数。此参数允许用户在扫描期间通过名称忽略包、模块和全局对象。请参阅叙事文档中的“忽略扫描参数”以获取更多详细信息。
1.0a2 (2011-09-02)
关闭 ImpLoader 文件句柄,以避免在 Python 3 上出现资源警告。
1.0a1 (2011-08-27)
Python 3 兼容性。
允许将 onerror 回调传递给 Scanner.scan()。
0.9 (2011-06-18)
防止在尝试内省疯狂模块作用域对象时发生扫描时间异常。请参阅 https://github.com/Pylons/venusian/issues/5。
0.8 (2011-04-30)
正常的“setup.py测试”不支持在py 2.4或2.5下运行venusian测试;当它扫描'classdecorators'组件时,会崩溃。为了解决这个问题,我们曾经依赖于setup_requires中的nose,并通过将test_suite设置为“nose.collector”来让“setup.py测试”使用nose,但我们不能再这样做,因为人们使用pip包安装Venusian;pip包不支持setup_requires。所以,很抱歉,我们已经陷入了困境;在这种情况下,您只需知道安装nose并运行“setup.py nosetests”而不是“setup.py test”。或者只需运行“tox”,它在所有Python下进行测试。
0.7 (2011-03-16)
在文档中使用Pylons主题。
修复pypy上的孤儿pyc测试。
修复GitHub问题#1:没有装饰的装饰类子类不应该继承其父类的装饰。
修复GitHub问题#2:扫描应只对每个对象进行一次“查找”,无论该对象导入了多少个模块。
0.6 (2011-01-09)
一些元类(如Elixir的)在扫描期间请求不存在的属性时不会抛出AttributeError。我们现在在询问对象__venusian_callbacks__时捕获所有异常,而不仅仅是AttributeError。
0.5 (2010-12-19)
使codeinfo属性作为AttachInfo对象的属性可用。它将是一个表示venusian装饰器上下文的元组,形式为(filename, lineno, function, sourceline)。例如:('/home/chrism/projects/venusian/tests/test_advice.py', 81, 'testCallInfo', 'add_handler(foo, bar)')
0.4 (2010-09-03)
错误修复:当一个用作类装饰器的venusian装饰器同时用于一个类及其子类时,超类和子类将实际共享相同的回调集。这不是我们的意图:每个类声明应有其自己的局部回调集;通过装饰添加的回调不应被继承,并且超类不应接收其子类的装饰。
将测试组件组织到一个单独的目录中。
0.3 (2010-06-24)
在扫描期间忽略孤儿模块(没有对应.py文件的.pyc或.pyo文件)。
0.2 (2010-04-18)
添加扫描类别的概念(见文档中的“扫描类别”部分),以便应用程序能够同时使用多个Venusian框架。
0.1 (2010-02-15)
初始发布。
项目详情
venusifork-2.0a3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6271ecc9e360aae9503c17a9a8ec2acad368f26f357e384fd0186b34dfbde270 |
|
MD5 | 1b8554298fa283e02c45b48cc8ed2f22 |
|
BLAKE2b-256 | 56d76a5ba45fc805a90d1fd61b22d2f940ecb153ba208eda69cbea0f9c8afd35 |