使用venusian代替*.zcml进行配置的实验
项目描述
venusianconfiguration
此包(venusianconfiguration)提供了基于venusian的Python配置语法,用于替代zope.configuration中的zcml。此包不会像以前使用的grok那样替换zope.configuration,而是仅提供对现有zope.configuration指令的通用Python绑定。因此,venusianconfiguration更像是grok的替代品,而不是zope.configuration的替代品。
此包的当前状态可以描述为已在内部使用,但可能尚未准备好供社区使用。
优点
from venusianconfiguration import configure
configure.i18n.registerTranslations(directory='locales')
@configure.browser.page.klass(
name='hello-world', for_=Interface,
permission='zope2.View')
class HelloWorld(BrowserView):
def __call__(self):
return u'Hello world!'
@configure.plone.behavior.provides(
title=_(u'My behavior),
description=_(u'Enables magic'))
class IMyBehavior(model.Schema):
custom_field = schema.TextLine()
alsoProvides(IMyBehavior, IFormFieldProvider)
缺点
from venusianconfiguration import scan
from venusianconfiguration import configure
from mypackage import browser
scan(browser)
import zcmlpackage
configure.include(package=zcmlpackage)
import otherpypackage
configure.include(package=otherpypackage, file='configure.py')
import mypackage.submodule
configure.include(package=mypackage.submodule,
file='configure.py')
缺点
zope.configuration基本上是语法无关的,但遗憾的是,ZCML一直是它唯一的实现语法,我们也曾直接调用其ZCML特定的API(例如在测试固定装置和z3c.autoinclude中)。
因此,在没有猴子补丁的情况下,无法在zope.configuration外部引入新的zope.configuration语法...
venusianconfiguration通过猴子补丁在zope.configuration的ZCML支持中的processxmlfile方法工作,使其也能接受Python文件,并将这些文件传递给venusianconfiguration进行处理。
为了支持z3c.autoinclude,venusianconfiguration还通过猴子补丁修改了z3c.autoinclude的includePluginsDirective和includePluginsOveridesDirective(includeDependencies-directive被认为很邪恶,并且故意不支持)。
因此,总共为无ZCML配置进行了三个猴子补丁。
使用方法
[instance]
recipe = plone.recipe.zope2instance
...
eggs =
...
venusianconfiguration
zope-conf-additional =
# Enable venuasianconfiguration monkeypatches
%import venusianconfiguration
有关更多示例,请查看源代码中包含的demo-package。
故障排除
由于配置现在是用Python编写的,因此您的附加组件必须在setup.py中正确定义其命名空间包。例如,名为my.product的附加组件将具有以下命名空间包定义
setup(
...
namespace_packages=['my'],
...
)
即使没有ZCML,附加组件也必须注册才能进行配置。这可以通过将z3c.autoinclude-entrypoint添加到附加组件的setup.py中完成
setup(
...
entry_points="""
# -*- Entry points: -*-
[z3c.autoinclude.plugin]
target = plone
"""
)
另一种方法是,将包添加到您的Plone实例的buildout-part中plone.recipe.zope2instance的zcml-option。
[instance]
recipe=plone.recipe.zope2instance
...
zcml = my.product
变更日志
1.1.2 (2021-09-01)
修复了PEP 320钩子在Plone 5.2上失败的问题,因为dummy component.xml被返回为字符串而不是字节 [datakurre]
1.1.1 (2018-11-07)
添加了faceted命名空间 [datakurre]
1.1.0 (2018-01-17)
删除了z3c.autoinclude插件入口点,以解决z3c.autoinclude在Plone中包含错误包的问题,这将在Plone中禁用默认加载的实验性ZCML指令从meta.zcml [datakurre]
1.0.2 (2017-12-21)
修复了默认配置指令可变导致意外行为的问题 [datakurre]
1.0.1 (2016-09-21)
修复了zope.deferredimported模块未被识别为模块的问题 [datakurre]
1.0.0 (2016-04-19)
第一个版本。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
venusianconfiguration-1.1.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2c63f18390b71ba2e34d095bb7274204b418e44b9a824804746cff3f399843d3 |
|
MD5 | f5257ffdd2f2aea772ba3fb9c8012b79 |
|
BLAKE2b-256 | 2c947dab90aebb095b4a8a91d097160bf961b67530f48ba9a5c360e2b83bbcd2 |
venusianconfiguration-1.1.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e9b0bb14f0b511c36c2534d2cf24a32e6401c810a1bd1c1784386828cc16c482 |
|
MD5 | b1e9b900caaa039b71beec142bcae07c |
|
BLAKE2b-256 | 8ebfd619716d51faa7da1d728601e1e850bb31fcae2242c1efc3721940246339 |