#plone #dexterity #transmogrifier
#plone #dexterity #transmogrifier
Вопрос:
Мы используем профиль импорта содержимого quintagroup.transmogrifier для загрузки содержимого для наших автоматических тестов (очень полезно). Установка страницы по умолчанию, похоже, не работает.
В документах предлагается, что quintagroup.transmogrifier поддерживает настройку страниц по умолчанию, но не соответствует ли это шагам импорта общих настроек. В конце концов я понял, что вам нужно добавить properties.xml файл в папку элемента folderish со следующим:
<?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.Раздел свойств, в котором он падает:
path = item[pathkey]
obj = self.context.unrestrictedTraverse(path, None)
Здесь path — это строка в юникоде, а unrestrictedTraverse возвращает None. Если вы используете байтовую строку, то она возвращает правильный объект. Это несовместимость с Dexterity или я делаю что-то не так?
Ответ №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 так что авторы могут исправить это за вас.
Комментарии:
1. Хорошо, спасибо за совет. Я поднял проблему plone.org/products/quintagroup.transmogrifier/issues/3/view и на данный момент я устанавливаю страницу по умолчанию в своих методах настройки тестирования
2. @martijn-pieters, есть другой проект под названием «plone.app.transmogrifier.urlnormalizer», который можно было бы добавить в конвейер для устранения проблем с ascii. У меня действительно были проблемы, если путь включал папку.
3. @pigeonflight: действительно, использование раздела нормализатора URL помогло бы очистить пути в этом случае. Но это все равно было бы обходным путем; код quintagroup не должен предполагать, что путь является простой строкой.