我正在尝试卸载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
已注册为未命名的适配器。
答案 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是否仍能正常工作。)