2

我们正在使用 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。如果您使用字节字符串,那么它会返回正确的对象。这是与敏捷不兼容还是我做错了什么?

4

1 回答 1

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)

将其报告给Plone.org 上的专用问题跟踪器,以便作者可以为您修复它。

于 2011-06-09T19:38:10.330 回答