使用quintagroup.transmogrifier通用设置导入设置默认页面不适用于dexterity

时间:2011-06-09 09:08:12

标签: plone dexterity transmogrifier

我们正在使用quintagroup.transmogrifier内容导入配置文件来为我们的自动化测试加载内容(非常有用)。设置默认页面似乎不起作用。

文档建议quintagroup.transmogrifier支持设置默认页面,但不支持是否适用于通用设置导入步骤。我最终发现你需要将一个properties.xml文件添加到文件夹项目的文件夹中,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<properties>
    <property name="default_page" type="string">
        index
    </property>
</properties>

其中index由默认页面的id替换,并且在import.cfg中也需要

[transmogrifier]
pipeline =
    reader
    …
    propertiesimporter

[reader]
…
.properties.xml = propertymanager

[propertiesimporter]
blueprint = quintagroup.transmogrifier.propertiesimporter

然而,这不起作用。我们正在运行Plone 4.1rc3 + Dexterity 1.0,可能它与Dexterity不兼容。我已经跟踪了quintagroup.transmogrifier.propertymanager.PropertiesImporterSection中的代码位置:

        path = item[pathkey]
        obj = self.context.unrestrictedTraverse(path, None)

此处path是一个unicode字符串,unrestrictedTraverse返回None。如果使用字节字符串,则返回正确的对象。这是与Dexterity的不兼容还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是您需要向quintagroup.transmogrifier包的作者报告的错误。路径必须始终是ASCII字节字符串,而不是Unicode对象。 collective.transmogrifier(quintagroup.transmogrifier使用的底层引擎)中的所有部分都将路径编码为ASCII。

以下是collective.transmogrifier.sections.constructor的代码段,例如:

     type_, path = item[typekey], item[pathkey]

     fti = self.ttool.getTypeInfo(type_)
     if fti is None:                           # not an existing type
         yield item; continue

     path = path.encode('ASCII')
     elems = path.strip('/').rsplit('/', 1)
     container, id = (len(elems) == 1 and ('', elems[0]) or elems)
     context = self.context.unrestrictedTraverse(container, None)

dedicated issue tracker on Plone.org报告,以便作者为您解决。