gpt4 book ai didi

plone - 向 plone.registry 添加新记录,无需重新运行 GenericSetup/重新安装产品

转载 作者:行者123 更新时间:2023-12-04 22:05:54 25 4
gpt4 key购买 nike

在 Plone 附加产品中,我有一个控制面板页面,可以在其中设置一些配置选项。它们存储在 plone.registry 中。控制面板适配器获取其__init__ 中的不同字段。通过查询接口(interface)的方法,如:

class MultiLanguageExtraOptionsAdapter(LanguageControlPanelAdapter):
implementsOnly(IMultiLanguageExtraOptionsSchema)

def __init__(self, context):
super(MultiLanguageExtraOptionsAdapter, self).__init__(context)
self.registry = getUtility(IRegistry)
self.settings = self.registry.forInterface(
IMultiLanguageExtraOptionsSchema)

现在我在接口(interface) IMultiLanguageExtraOptionsSchema 中添加一个附加字段并重新启动 plone。然后在控制面板页面上出现错误:
KeyError: 'Interface `plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema` defines a field `blah`, for which there is no record.'

(这对于 forInterface 方法是预期的,如 plone.registry 自述文件中所述。记录不存在。)

当然,如果我通过 GenericSetup (registry.xml) 添加该字段,然后重新安装产品/重新运行“控制面板”步骤,一切都很好:
<registry>
<records interface="plone.app.multilingual.interfaces.IMultiLanguageExtraOptionsSchema">
<value key="blah"></value>
<records>
<registry>

但我不想强制用户重新安装产品,只是因为产品特定的控制面板中有一个新选项。所以我的问题是:有没有推荐的方法来获取新字段的新记录到 plone.registry 中?

最佳答案

您可以尝试/捕获 KeyError,然后确保已注册所有注册表设置:

try:
self.settings = self.registry.forInterface(IMultiLanguageExtraOptionsSchema)
except KeyError:
registry = getUtility(IRegistry)
registry.registerInterface(IMultiLanguageExtraOptionsSchema)

不过,我建议编写一个升级步骤(这当然会迫使您的用户重新安装产品)。

升级.py:
def update_registry(context):
registry = getUtility(IRegistry)
registry.registerInterface(IMultiLanguageExtraOptionsSchema)

升级.zcml::
  <genericsetup:upgradeStep
source="*"
destination="1100"
title="Update plone.app.multilingual setting registry"
description=""
profile="plone.app.multilingual:default"
handler=".upgrades.update_registry"
/>



https://github.com/collective/collective.mailchimp/blob/master/collective/mailchimp/upgrades.py



https://github.com/collective/collective.mailchimp/blob/master/collective/mailchimp/upgrades.zcml

例如。

关于plone - 向 plone.registry 添加新记录,无需重新运行 GenericSetup/重新安装产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com