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)
第三个问题可能是如何测试记录是否在无意中被删除.
还有其他推荐吗?
注意:我还没有直接在包中使用plone.app.registry.
我的第一个问题是:一个包必须在卸载时删除它的注册表?
是.从社区软件包的作者那里预期这一点至少是合理的.我希望plone.app.registry不会绊倒旧的已删除软件包中缺少的东西,就像它似乎在这里做的那样,但这可能很棘手.
所以,我的第二个问题是:如何在卸载时优雅地删除控制面板记录?
在大多数GenericSetup文件中remove="True"工作.对这个具体案例不确定.