如何取消注册Archetypes架构扩展器?

时间:2012-02-17 13:37:25

标签: python plone zope

我正在尝试卸载collective.carousel的archetypes schemaextender(我只是在该软件包的portlet中,而不是将Carousel源添加到每个PloneFormGen字段等)。

我尝试使用导入步骤取消注册适配器,但到目前为止失败了。

def unregister_carousel_extender(site):
    from collective.carousel.schemaextender import ContentTypeExtender
    from archetypes.schemaextender.interfaces import ISchemaExtender
    from Products.ATContentType.interfaces import IATContentType

    sm = site.getSiteManager()
    sm.unregisterAdapter(factory=ContentTypeExtender, provided=(ISchemaExtender,), required=(IATContentType), name=u'')

我也花了很多时间在pdb上。我能够掌握已注册的适配器,并且可以看到collective.carousel.schemaextender.ContentTypeExtender已注册为未命名的适配器。

3 个答案:

答案 0 :(得分:1)

您无法在导入步骤中取消注册。导入步骤仅在导入配置文件时运行。相反,在启动实例时,将解析并执行zcml声明。因此,请确保在注册适配器后取消注册时间。

答案 1 :(得分:0)

'required'参数需要是一系列接口而不是单个接口。所以,required = [IATContentType]或required =(IATContentType,)(注意逗号!)而不是required =(IATContentType)。

您可以检查unregisterAdapter的返回值以确定它是否成功...如果它为False,则找不到您指定的适配器(这通常意味着其中一个参数不正确)。

答案 2 :(得分:0)

你想要的是在Zope启动时撤消collective.carousel的一些zcml。您可以使用z3c.unconfigure包来执行此操作。

(请注意,当您取消配置zcml的这一部分时,我不确定collective.carousel的portlet是否仍能正常工作。)