配置和注册plone组件,不带zcml

collective.grok的Python项目详细描述


Overview

collective.grok打算减少在plone中使用zcml的需要 项目。

使用由 five.grokmartian,这个包裹 添加新的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.grokcollective.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支持(有条件)
  • 行为注册(应该灵活?)

Credits

本产品的开发由:

Changelog

1.0a2 (2012-04-16)

  • 已更改的gs.profile提供从基到扩展的参数,因为它是 产品开发人员最常见的用例(danke davilima6)[ericof]

1.0a1 (2012-04-14)

  • 通用设置:寄存器配置文件[ericof]
  • 通用设置:注册导入步骤[ericof]
  • 通用设置:注册导出步骤[ericof]
  • 通用设置:注册升级步骤[ericof]
  • i18n:注册翻译[ericof]
  • 初始版本[ericof]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jackson递归替换匹配字段   JavaGoogleCalendarAPI共享示例   我怎样才能让Eclipse存储。在项目文件夹之外的文件夹中对文件进行分类,我将在其中存储文件。java源文件?   java无法序列化mongodb spark类   java分析的库依赖项。Net/NuGet项目与SonarQube插件   java将安卓日历导出到VCS   java Tomcat 7 war文件部署   java从方法返回泛型类型化对象。获取类<SomeType>而不是SomeType   32位和64位windows服务器上JVM的java最大堆大小   java如何在新的导航抽屉体系结构组件中实现共享应用或评级应用或注销功能   java设置richfaces4树中的默认选定节点   OneToMany的java Hibernate级联问题   java在一个文件中存储常量,并在所有活动中调用它们   java无法从teradata的结果集可靠地写入avro