跳转到主要内容

使用venusian代替*.zcml进行配置的实验

项目描述

venusianconfiguration

此包(venusianconfiguration)提供了基于venusian的Python配置语法,用于替代zope.configuration中的zcml。此包不会像以前使用的grok那样替换zope.configuration,而是仅提供对现有zope.configuration指令的通用Python绑定。因此,venusianconfiguration更像是grok的替代品,而不是zope.configuration的替代品。

此包的当前状态可以描述为已在内部使用,但可能尚未准备好供社区使用

https://travis-ci.org/datakurre/collective.venusianconfig.png

优点

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.autoincludevenusianconfiguration还通过猴子补丁修改了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 (13.8 kB 查看哈希值)

上传时间:

构建分发

venusianconfiguration-1.1.2-py2.py3-none-any.whl (9.6 kB 查看哈希值)

上传时间: Python 2 Python 3

支持者

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