2014-11-11 5 views
1

В текущем Plone 5 coredev buildout я пытаюсь написать профиль удаления GenericSetup для надстройки, которая регистрирует некоторый css в cssregistry.xml. В Plone 5, portal_css и portal_javascripts пустые, и все эти ресурсы теперь автоматически загружаются в реестр ресурсов. Но соответствующая деинсталляция отсутствует. Если у меня есть один CSS ресурс, я получаю следующие записи в реестре ресурсов:Как удалить элемент из списка Тип записи реестра ресурсов с помощью Generic Setup

<record name="plone.resources/resource-myaddon-stylesheets.conf">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.css">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.deps">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.export">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.init">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.js">...</record> 
    <record name="plone.resources/resource-myaddon-stylesheets.url">...</record> 

(я все это несмотря на то, у меня нет Js ресурсов, и все они имеют пустое значение, для CSS, кроме запись)

Кроме того, в следующей записи нового <element>:.

<record name="plone.bundles/plone-legacy.resources" interface="Products.CMFPlone.interfaces.resources.IBundleRegistry" field="resources"> 

    ... 

    <value> 
     ... 
     <element>resource-myaddon-stylesheets</element> 
    </value> 
</record> 

Как создать свой профиль GS деинсталлировать, достаточно просто удалить прежние 7 записей в registry.xml. Но как удалить единственный <element> из последней записи? Я просмотрел тест в plone.app.registry, но удаление элемента, похоже, не покрывается.

В конечном счете, было бы замечательно, если бы удаление можно было обрабатывать автоматически, точно так же, как установка.

+0

Испытывает отдельно, вы посмотрели источник импорта/экспорта? Скорее всего, это не охвачено. –

+0

Да, я посмотрел на источник импорта, и вы правы: это не покрыто. – fulv

ответ

2

Похоже, обходной путь, чтобы добавить что-то вроде этого, чтобы Extensions/Install.py:

def _removeBundleFromRegistry(): 
    logger.info('Removing bundle reference from registry') 

    record = 'plone.bundles/plone-legacy.resources' 
    resources = api.portal.get_registry_record(record) 
    if u'resource-myaddon-stylesheets' in resources: 
     resources.remove(u'resource-myaddon-stylesheets') 

def uninstall(portal, reinstall=False): 
    if not reinstall: 
     ... 
     _removeBundleFromRegistry() 
     ... 

Слишком плохо.

1

Вы должны использовать что-то вроде этого:

<record name="plone.bundles/plone-legacy.resources" interface="Products.CMFPlone.interfaces.resources.IBundleRegistry" field="resources"> 
    <value purge="false"> 
    <element remove="true">resource-myaddon-stylesheets</element> 
    </value> 
</record> 

Вы можете увидеть рабочий пример в профиле удаления из brasil.gov.paginadestaque пакета.

+0

Вот на что я надеялся, но, к сожалению, я не думаю, что это работает. Если вы посмотрите на https://github.com/plone/plone.app.registry/blob/master/plone/app/registry/exportimport/handler.py#L226, нигде не волнует, есть ли у вашего элемента remove = " true ". Я использую plone.app.registry 1.2.3, и я прошел через него, но, конечно, я мог что-то упустить. Я попробовал brasil.gov.paginadestaque, но я получаю сообщение об ошибке, когда пытаюсь его удалить. – fulv

+0

Не обращайте внимания на ошибку, я понял, что мне нужно вручную установить коллектив. – fulv

+0

Магия в brasil.gov.paginadestaque происходит в: https://github.com/plonegovbr/brasil.gov.paginadestaque/blob/master/src/brasil/gov/paginadestaque/Extensions/Install.py#L23. Файл https://github.com/plonegovbr/brasil.gov.paginadestaque/blob/master/src/brasil/gov/paginadestaque/profiles/uninstall/registry.xml ничего не делает, вы также можете удалить его , – fulv