Как отменить регистрацию схемы расширения Archetypes? - PullRequest
1 голос
/ 17 февраля 2012

Я пытаюсь удалить collective.carousel архетипов 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 зарегистрирован как безымянный адаптер.

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

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

0 голосов
/ 26 сентября 2013

То, что вы хотите, это отменить некоторые zcml colle.carousel при запуске Zope. Это можно сделать с помощью пакета z3c.unconfigure .

(Обратите внимание, что я не уверен, что портлет коллективный. Carousel по-прежнему работает правильно, если вы отключили эту часть zcml.)

0 голосов
/ 17 февраля 2012

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

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

...