配置和注册plone组件,不带zcml
collective.grok的Python项目详细描述
目录
Overview
collective.grok打算减少在plone中使用zcml的需要 项目。
使用由 five.grok和 martian,这个包裹 添加新的decorators和helper函数,使plone开发人员能够专注于 python代码,而不是复制和粘贴zcml片段。
collective.grok vs five.grok
collective.grok的灵感来源于five.grok,它补充了five.grok和 在plone项目中,您将结束使用这两种方法。
grok将负责grokking适配器、用户、实用程序, 视图而collective.grok的目标是一般设置, 国际化,portlet(即将推出!).
Installation
这个包是其他包的依赖项,所以声明 它位于软件包的setup.py上,在install下需要:
install_requires=[ 'setuptools', # XXX: Add extra requirements here 'collective.grok', ],
注意
无需显式声明5.grok为 collective.grok已经做到了。
Usage
为了让它适合您的思维,collective.grok将其助手分组 例如,根据它所处理的plone技术,在包中, collective.grok.gs处理一般设置。
Generic Setup
当前版本的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.i18nMessageFactory支持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,提供的参数的默认值是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注册通用设置的导出步骤 包含以下元素元素以配置.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注册升级步骤,应将以下slug添加到 configure.zcml:
<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提供一个decorator来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')
TODO
- Portlet注册
- 权限注册 <里>Transmorifier支持(有条件)
- 行为注册(应该灵活?)
Changelog
1.0a2 (2012-04-16)
- 已更改的gs.profile提供从基到扩展的参数,因为它是 产品开发人员最常见的用例(danke davilima6)[ericof]
1.0a1 (2012-04-14)
- 通用设置:寄存器配置文件[ericof]
- 通用设置:注册导入步骤[ericof]
- 通用设置:注册导出步骤[ericof]
- 通用设置:注册升级步骤[ericof]
- i18n:注册翻译[ericof]
- 初始版本[ericof]