Plone控制面板的最佳实践

时间:2011-08-11 18:38:07

标签: registry plone uninstall

我正在使用package,其中包含使用plone.app.registry创建的控制面板。我跟着Timo's tutorial但是,在尝试添加其他记录时,我面临臭名昭着的 KeyError:没有记录的字段

所以我对最佳做法有几个问题:

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

我在我的包的registry.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([]))

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

还有其他推荐吗?

2 个答案:

答案 0 :(得分:5)

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

  

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

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

  

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

在大多数GenericSetup文件remove="True"中都有效。对这个具体案例不确定。

答案 1 :(得分:3)

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

我不是卸载时删除内容的一部分,因为有些时候你不想在重新安装时丢失配置...提供一种清理注册表的方法对于站点的管理员应该更好。在您不关心丢失数据的测试实例上进行测试。

第二个问题已经由毛母回答了,所以你应该关心错字:

delete =“true”!=“remove =”True“