Лучшие практики для панелей управления Plone

Я работаю над пакетом, который включает панель управления, созданную с помощью plone.app.registry. Я следовал руководству Тимо но при попытке добавить в него дополнительную запись я сталкиваюсь с печально известным KeyError: поле, для которого нет записи.

Итак, у меня есть пара вопросов о лучших практиках:

Мой первый вопрос: пакет должен удалить свой реестр во время удаления?

Я использовал это в реестре.xml моего пакета:

<registry>
  <records interface="collective.nitf.controlpanel.INITFSettings" />
</registry>

и это на metadata.xml:

<metadata>
  <version>1</version>
  <dependencies>
    <dependency>profile-plone.app.registry:default</dependency>
  </dependencies>
</metadata>

Но добавление delete="true" в профиль удаления, похоже, не работает. Я также попытался перечислить все записи по именам, но безуспешно, если только я не запустил этот шаг вручную в ZMI.

Итак, мой второй вопрос: как мне изящно удалить записи панели управления во время удаления?

Чтобы проверить, есть ли запись в реестре, я делаю что-то вроде этого:

def setUp(self):
    self.portal = self.layer['portal']
    setRoles(self.portal, TEST_USER_ID, ['Manager'])
    # Set up the NITF settings registry
    self.registry = Registry()
    self.registry.registerInterface(INITFSettings)

def test_record_sections(self):
    # Test that the sections record is in the control panel
    record_sections = self.registry.records[
        'collective.nitf.controlpanel.INITFSettings.sections']
    self.failUnless('sections' in INITFSettings)
    self.assertEquals(record_sections.value, set([]))

Третий вопрос может заключаться в том, как проверить, была ли запись удалена в неустановленное время.

Любая другая рекомендация?


person hvelarde    schedule 11.08.2011    source источник


Ответы (2)


Примечание: я еще не использовал plone.app.registry непосредственно в пакете.

Мой первый вопрос: пакет должен удалить свой реестр во время удаления?

да. По крайней мере, кажется разумным ожидать этого от авторов пакетов сообщества. Я надеюсь, что plone.app.registry не споткнется об отсутствующих вещах из старых удаленных пакетов, как здесь, но это может быть сложно.

Итак, мой второй вопрос: как мне изящно удалить записи панели управления во время удаления?

В большинстве файлов GenericSetup работает remove="True". Не уверен в этом конкретном случае.

person maurits    schedule 11.08.2011
comment
Удаление записей в plone.app.registry немного отличается и не работает для меня; вам нужно сделать что-то вроде этого: ‹record name=my.package.myRecord delete=true /› Я пытался добавить атрибут префикса в файл создание на основе интерфейса, но в документации это не совсем понятно. - person hvelarde; 12.08.2011

My first question is: a package must remove it's registry at uninstall time?

Я не участвую в удалении вещей во время удаления, потому что иногда вы не хотите терять свою конфигурацию при повторной установке ... предоставление способа очистки реестра должно быть лучше для администратора сайта. Проведите тест на тестовом экземпляре, где вы не хотите потерять свои данные.

На второй вопрос уже ответил maurits, поэтому вам следует обратить внимание на опечатку:

удалить = "истина"! = "удалить = "истина"

person toutpt    schedule 12.08.2011
comment
Вот почему после того, как продукт с профилем GenericSetup был установлен, панель Add/Remove products предлагает только возможность удалить его, а не переустановить (Plone 3.3 и выше). Он предлагает применить шаги обновления только в том случае, если они были зарегистрированы. Переустановка через portal_quickinstaller по-прежнему возможна для опытных пользователей, но они должны знать о возможных проблемах, о которых вы упоминали выше. - person maurits; 12.08.2011
comment
delete=true работает в plone.app.registry, но только если я запускаю шаг вручную в portal_setup; remove=true не задокументировано. - person hvelarde; 12.08.2011
comment
Документация @hvelarde: plone.org/documentation/kb/genericsetup/ и packages.python.org/Products.GenericSetup/ - person toutpt; 12.08.2011
comment
@maurits Я думаю, это также для того, чтобы заставить разработчиков создавать шаги обновления, по крайней мере, поэтому я начал писать их в своих собственных надстройках :) - person toutpt; 12.08.2011