【问题标题】:Remove browser layer on Plone 5删除 Plone 5 上的浏览​​器层
【发布时间】:2016-02-20 05:29:25
【问题描述】:

在以前的 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

我只是完成我的插件兼容性的一项测试!

【问题讨论】:

  • 我可以通过通用卸载测试确认类似的问题(在安装前和卸载后简单地制作 genericsetup 快照)-.-
  • 我假设他们有错误,对吗?
  • 好吧,我想是的。我没有深入研究,因为到目前为止我选择使用 plone 4.3.x。
  • 如果我可以添加注释:根据我的经验,在 Plone 4 上也需要卸载 browserlayer。有时你似乎不需要它,但有时如果你不提供卸载步骤,界面会隐藏在某个地方,然后在你做一些重要的事情时突然回来,比如 Plone 版本迁移。所以我的建议是:在 Plone 4 上也添加 GS 卸载。

标签: plone genericsetup plone-5.x


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题出在测试中:我正在测试接口的名称,而另一个包(在我的例子中是 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())
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2017-09-16
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多