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

#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 не должен предполагать, что путь является простой строкой.