Как проверить, установлен ли мой продукт, при его установке?

Я хочу выполнить части своего кода на этапе импорта, только если сам продукт еще не установлен.

Я попытался с помощью метода 'listInstalledProduct' инструмента быстрой установки.

Тем не менее, это вернет все установленные продукты, но не мой собственный.

Как я могу проверить, был ли мой продукт уже установлен на сайте?

1 ответ

Решение

С правильным намеком на Анну Вальтер (она же "awello") я смог найти решение:

from Products.CMFCore.utils import getToolByName
def myMethod(context):
    qi = getToolByName(context, 'portal_quickinstaller')

    prods = qi.listInstallableProducts(skipInstalled=False)

    for prod in prods:
        if (prod['id'] == 'your.productname') and (prod['status'] == 'new'):
        # further code...

По какой-либо причине и, к счастью, статус продукта во время переустановки вернет "неустановленный", еще не установленные продукты возвращаются со статусом "новый" и, наконец, уже установленные продукты сайта громко и гордо выкрикивают: "установлен",

Таким образом, можно отличить переустановку от начальной установки.

Проделав то же самое в Plone 5, я управлял кодом Иды Эбкес в:

from plone import api

def myMethod(context):

    portal = api.portal.get()
    qi = api.portal.get_tool('portal_quickinstaller')
    prods = qi.listInstallableProducts(skipInstalled=False)

    IsProductNameInstalled = len([k for k in prods if k['id']=='your.productname' and k['status']=='new']) == 0 and True or None

    if IsProductNameInstalled:
        # further code...

Другие вопросы по тегам