删除 Plone 5 上的浏览​​器层

Remove browser layer on Plone 5

在以前的 Plone 版本中,QuickInstaller 负责在卸载时自动删除一些内容;浏览器层和资源注册表资源就是这种情况。现在在 Plone 5 中,最好的做法是包含一个 GenericSetup 配置文件来显式卸载这些文件。

我跟进 Keul's blog post on uninstalls 并在我的包卸载配置文件中添加了一个 browserlayer.xml 文件,如下所示:

<?xml version="1.0"?>
<layers>
  <layer name="collective.fingerpointing" remove="true" />
</layers>

但我的包裹没有删除它。

有什么提示吗?

代码在:https://github.com/collective/collective.fingerpointing/pull/6

测试结果在:https://travis-ci.org/collective/collective.fingerpointing/jobs/110195902

我只差一项测试就可以实现我的附加组件的兼容性!

对于注销浏览器层,接口被忽略。只有浏览器层名称很重要。这必须与之前注册浏览器层的名称相匹配。

问题出在测试中:我正在针对接口名称进行测试,另一个包(在我的例子中,plone.app.event)有一个同名的浏览器层(IBrowserLayer) :

(Pdb) registered_layers()[4]
<InterfaceClass plone.app.event.interfaces.IBrowserLayer>

我正在使用这个:

def test_addon_layer_removed(self):
    from plone.browserlayer.utils import registered_layers
    layers = [l.getName() for l in registered_layers()]
    self.assertNotIn('IBrowserLayer', layers)

我改成如下:

def test_addon_layer_removed(self):
    from collective.fingerpointing.interfaces import IBrowserLayer
    from plone.browserlayer.utils import registered_layers
    self.assertNotIn(IBrowserLayer, registered_layers())

这就是为什么进行正确的测试很重要的原因。