我正在使用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([]))
第三个问题可能是如何测试记录是否在无意中被删除。
还有其他推荐吗?
答案 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“