Как проверить, установлен ли мой продукт, при его установке?
Я хочу выполнить части своего кода на этапе импорта, только если сам продукт еще не установлен.
Я попытался с помощью метода '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...