2012-02-17 2 views
1

Я пытаюсь удалить archetypes collective.carousel archetypes schemaextender (я только просил в портлете из этого пакета, не добавляя источник карусели для каждого поля 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 зарегистрирован как неназванный адаптер.

ответ

1

Вы не можете отменить регистрацию на этапе импорта. Шаги импорта выполняются только при импорте профиля. Напротив, объявления zcml будут анализироваться и выполняться при запуске вашего экземпляра. Поэтому убедитесь, что вы отменили регистрацию после адаптер был зарегистрирован, каждые раз.

0

Параметр «обязательно» должен быть последовательностью интерфейсов, а не одним интерфейсом. Итак, required = [IATContentType] или required = (IATContentType,) (обратите внимание на запятую!), А не required = (IATContentType).

Вы можете проверить возвращаемое значение из unregisterAdapter, чтобы узнать, было ли это успешным ... если это False, он не нашел указанный вами адаптер (что обычно означает, что один из параметров неверен).

0

Что вы хотите, так это отменить некоторые zcml коллективного вызова. Когда Zope запустится. Вы можете сделать это с пакетом z3c.unconfigure.

(Обратите внимание, что я не уверен, что портлет коллективной.карузы все еще работает правильно, если вы не сконфигурировали эту часть zcml.)