Настройка страницы по умолчанию с помощью quintagroup.transmogrifier. Импорт общих настроек не работает с ловкостью. - PullRequest
2 голосов
/ 09 июня 2011

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

1 Ответ

1 голос
/ 09 июня 2011

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

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

...