跳转到主要内容

配置和注册Plone组件,无需ZCML

项目描述

概述

collective.grok旨在减少在Plone项目中使用ZCML的需求。

利用five.grokmartian提供的基础设施,此包添加了新的装饰器和辅助函数,以使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 (20.3 kB 查看哈希值)

上传时间

支持者