Настройка страницы по умолчанию с помощью quintagroup.transmogrifier. Импорт общих настроек не работает с ловкостью.

Мы используем профиль импорта контента quintagroup.transmogrifier для загрузки контента для наших автоматических тестов (очень полезно). Настройка страницы по умолчанию не работает.

Документы предполагают, что quintagroup.transmogrifier поддерживает настройку страниц по умолчанию, но не определяет, выполняет ли это общие шаги импорта настроек. В конце концов я понял, что вам нужно добавить файл properties.xml в папку папочного элемента со следующим:

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

где индекс заменяется идентификатором страницы по умолчанию, а также в вашем файле 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 - это строка в Юникоде, а unrestrictedTraverse возвращает None. Если вы используете байтовую строку, то она возвращает правильный объект. Это несовместимость с Ловкостью или я что-то не так делаю?

1 ответ

Решение

Об этой ошибке вы должны сообщить авторам пакета quintagroup.transmogrifier. Пути всегда должны быть ASCII-байтовыми строками, а не объектами Unicode. Все разделы в Collabo.Transmogrifier (базовый механизм, который использует quintagroup.transmogrifier) ​​кодируют пути к ASCII.

Вот фрагмент кода из коллективного коллектива.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, чтобы авторы могли исправить это за вас.

Другие вопросы по тегам