Plone控制面板的最佳实践

hve*_*rde 5 registry plone uninstall

我正在开发一个包含使用plone.app.registry创建的控制面板的.我按照Timo的教程,但在尝试添加额外的记录时,我面临着臭名昭着的KeyError:一个没有记录的字段.

所以我对最佳实践有几个问题:

我的第一个问题是:一个包必须在卸载时删除它的注册表?

我在我的包的registry.xml中使用了这个:

<registry>
  <records interface="collective.nitf.controlpanel.INITFSettings" />
</registry>
Run Code Online (Sandbox Code Playgroud)

这在metadata.xml上:

<metadata>
  <version>1</version>
  <dependencies>
    <dependency>profile-plone.app.registry:default</dependency>
  </dependencies>
</metadata>
Run Code Online (Sandbox Code Playgroud)

但是在卸载配置文件中添加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([]))
Run Code Online (Sandbox Code Playgroud)

第三个问题可能是如何测试记录是否在无意中被删除.

还有其他推荐吗?

mau*_*its 5

注意:我还没有直接在包中使用plone.app.registry.

我的第一个问题是:一个包必须在卸载时删除它的注册表?

是.从社区软件包的作者那里预期这一点至少是合理的.我希望plone.app.registry不会绊倒旧的已删除软件包中缺少的东西,就像它似乎在这里做的那样,但这可能很棘手.

所以,我的第二个问题是:如何在卸载时优雅地删除控制面板记录?

在大多数GenericSetup文件中remove="True"工作.对这个具体案例不确定.