配置和注册Plone组件,无需ZCML
项目描述
概述
collective.grok旨在减少在Plone项目中使用ZCML的需求。
利用five.grok和martian提供的基础设施,此包添加了新的装饰器和辅助函数,以使Plone开发者能够专注于Python代码,而不是复制和粘贴ZCML片段。
collective.grok 与 five.grok 的比较
collective.grok受five.grok的启发,并与之相辅相成。在Plone项目中,您将使用这两个。
five.grok将处理适配器、订阅者、实用工具、视图等,而collective.grok旨在实现类似通用设置、国际化、部件(即将推出)等功能。
安装
此包旨在成为其他包的依赖项,因此请在您的包的setup.py文件下的install_requires中声明它。
install_requires=[ 'setuptools', # XXX: Add extra requirements here 'collective.grok', ],
使用方法
为了使它符合您的思维,集体.grok根据它所涉及到的Plone技术将其助手按包分组,例如,collective.grok.gs处理通用设置。
通用设置
当前版本collective.grok支持由ZCML实现的常用通用设置注册。
注册配置文件
要使用ZCML注册配置文件,您应将以下元素添加到configure.zcml(或由它包含的任何其他文件)。
<genericsetup:registerProfile name="default" title="Portal policy for plone.org" directory="profiles/default" description="Installs dependencies and stuff for our portal" provides="Products.GenericSetup.interfaces.EXTENSION" i18n:attributes="title; description" />
使用collective.grok,相同的注册将(详细地)完成
from collective.grok import gs
from Products.GenericSetup.interfaces import EXTENSION
gs.profile(name=u'default',
title=u'Portal policy for plone.org',
description=u'Installs dependencies and stuff for our portal',
directory='profiles/default',
provides=EXTENSION)
要注册第二个配置文件(在我们的例子中,一个用于卸载的配置文件),我们将执行相同的操作(现在,不传递参数名称)
gs.profile(u'uninstall',
u'Uninstall portal policy for plone.org',
u'Removes dependencies and stuff from our portal',
'profiles/uninstall',
EXTENSION)
并且支持使用zope.i18nmessageid MessageFactory进行i18n。在以下配置文件注册中,我们翻译了配置文件标题及其描述
from my.package import MessageFactory as _
gs.profile(u'init',
_(u'Initial content structure for plone.org'),
_(u'Constructs folder structure and navigation'),
'profiles/init',
EXTENSION)
从版本1.0a2开始,provides参数的默认值是EXTENSION,因此您可以省略它
from collective.grok import gs
gs.profile(name=u'default',
title=u'Portal policy for plone.org',
description=u'Installs dependencies and stuff for our portal',
directory='profiles/default')
注册导出步骤
使用ZCML为通用设置注册导出步骤需要在configure.zcml(或由它包含的任何其他文件)中包含以下元素。
<genericsetup:exportStep
name="archetypetool"
title="Archetype Tool"
description="Export Archetype Tool."
handler="Products.Archetypes.exportimport.archetypetool.exportArchetypeTool">
</genericsetup:exportStep>
注册指向一个处理程序,该处理程序实现了实际的导出代码
def exportArchetypeTool(context):
"""Export Archetype Tool configuration.
"""
site = context.getSite()
logger = context.getLogger("archetypetool")
tool = getToolByName(site, TOOL_NAME, None)
if tool is None:
return
exportObjects(tool, '', context)
logger.info("Archetype tool exported.")
通过理解,相同的注册将在archetypetool模块上通过导入和装饰器完成
from collective.grok import gs
@gs.exportstep(name=u'archetypetool', title='Archetype Tool',
description='Export Archetype Tool.')
def exportArchetypeTool(context):
"""Export Archetype Tool configuration.
"""
site = context.getSite()
logger = context.getLogger("archetypetool")
tool = getToolByName(site, TOOL_NAME, None)
if tool is None:
return
exportObjects(tool, '', context)
logger.info("Archetype tool exported.")
再次,如果您想的话,甚至可以省略参数名称…
from collective.grok import gs
@gs.exportstep(u'archetypetool','Archetype Tool',
'Export Archetype Tool.')
def exportArchetypeTool(context):
"""Export Archetype Tool configuration.
"""
site = context.getSite()
logger = context.getLogger("archetypetool")
tool = getToolByName(site, TOOL_NAME, None)
if tool is None:
return
exportObjects(tool, '', context)
logger.info("Archetype tool exported.")
注册导入步骤
导入步骤与导出步骤的处理方式类似。因此,ZCML注册已完成(zcml文件)
<genericsetup:importStep
name="archetypes-various"
title="Archetypes setup"
description="Import various settings for Archetypes."
handler="Products.Archetypes.setuphandlers.setupArchetypes">
<depends name="componentregistry"/>
</genericsetup:importStep>
相应的Python代码
def setupArchetypes(context):
"""
Setup Archetypes step.
"""
# Only run step if a flag file is present (e.g. not an extension profile)
if context.readDataFile('archetypes-various.txt') is None:
return
out = []
site = context.getSite()
install_uidcatalog(out, site)
install_referenceCatalog(out, site)
install_templates(out, site)
理解后,我们将有
from collective.grok import gs
@gs.importstep(name=u'archetypetool', title='Archetype Tool',
description='Export Archetype Tool.',
dependecies=['componentregistry',])
def setupArchetypes(context):
"""
Setup Archetypes step.
"""
# Only run step if a flag file is present (e.g. not an extension profile)
if context.readDataFile('archetypes-various.txt') is None:
return
out = []
site = context.getSite()
install_uidcatalog(out, site)
install_referenceCatalog(out, site)
install_templates(out, site)
注册升级步骤
要使用ZCML注册升级步骤,应在configure.zcml中添加以下slug
<genericsetup:upgradeStep
title="Update portal title"
description="Upgrade step used to update portal title"
source="1000"
destination="2000"
sortkey="1"
handler=".to2000.from1000"
profile="my.package:default" />
处理程序代码将如下所示
def to2000(context):
"""
Update portal title
"""
site = context.getSite()
site.title = u'A New Title'
collective.grok提供了一个装饰器来处理此代码
from collective.grok import gs
@gs.upgradestep(title=u'Update portal title',
description=u'Upgrade step used to update portal title',
source='1000', destination='2000', sortkey=1,
profile='my.package:default')
def to2000(context):
"""
Update portal title
"""
site = context.getSite()
site.title = u'A New Title'
i18n
注册翻译
使用ZCML为包注册翻译目录
<configure
...
xmlns:i18n="http://namespaces.zope.org/i18n"
...>
<i18n:registerTranslations directory="locales" />
使用collective.grok,相同的注册将完成
from collective.grok import i18n i18n.registerTranslations(directory='locales')
待办事项
组件注册
权限注册
Transmogrifier支持(条件性)
行为注册(应在Dexterity中?)
致谢
本产品的开发得到了
变更日志
1.0a2 (2012-04-16)
将gs.profile的provides参数从BASE更改为EXTENSION,因为这是产品开发人员最常用的用例(danke davilima6)[ericof]
1.0a1 (2012-04-14)
通用设置:注册配置文件 [ericof]
通用设置:注册导入步骤 [ericof]
通用设置:注册导出步骤 [ericof]
通用设置:注册升级步骤 [ericof]
i18n:注册翻译 [ericof]
首次发布 [ericof]
项目详细信息
collective.grok-1.0a2.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2303a51f800133c568229b916eac373c667c6a28f86030ddfd1e8a0638c4a336 |
|
| MD5 | 7261464f37c72844aab0ab66a994f065 |
|
| BLAKE2b-256 | 146a106eb66a4ba54ab5ae28c16209e182ccd10c27311058222d033ea2530e48 |