plone.registry - 当 IRecordModifiedEvent 被触发时,如何捕获注册表中的更改?
plone.registry - How do I capture a change in registry when IRecordModifiedEvent is fired?
我正在尝试复制一个示例,该示例在应该触发 IRecordModified 时检测注册表中的更改。
https://pypi.python.org/pypi/plone.app.registry#registry-events
我尝试使它适应我正在做的事情,但我放置的打印语句没有触发。
在我的registry.xml
<registry>
<records interface="my.product.utils.db_settings.IDBSettings">
</registry>
在我的events.py
from my.product.utils.db_settings import IDBSettings
@adapter(IDBSettings, IRecordModifiedEvent)
def detectDBSettingsChange(settings, event):
print "detectDBSettingsChange"
在包含控制面板的模块 db_settings.py 中,我有:
来自 plone.app.registry.browser 导入控制面板
class IDBSettings(Interface):
db_string = schema.TextLine(title=u"Database String",
description=u"String for database connection",
default=u"Some value"
)
class DBSettingsEditForm(controlpanel.RegistryEditForm):
schema = IDBSettings
label = u"Database settings"
description = u"String setup"
def updateFields(self):
super(DBSettingsEditForm, self).updateFields()
def updateWidgets(self):
super(DBSettingsEditForm, self).updateWidgets()
class DBSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
form = DBSettingsEditForm
在我的 configure.zcml 实用程序中:
<include package="plone.app.registry" />
<browser:page
name="database-settings"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
class=".db_settings.DBSettingsControlPanel"
permission="cmf.ManagePortal"
/>
当我进入控制面板,更改值,然后保存时,detectDBSettingsChange 似乎不起作用,因为打印语句被忽略了。我是否处理了错误的事件来捕获注册表中的更改?
我认为您需要 docs. I'm not sure that the adapter in your events.py is sufficient. Perhaps you can use provideHandler Method like described in plone.registry
中描述的订阅者
您需要添加订阅者并像这样在您的 configure.zcml 文件中注册:
<configure xmlns="http://namespaces.zope.org/zope">
<subscriber
for="plone.registry.interfaces.IRecordModifiedEvent"
handler="your.package.your_subscriber"
/>
</configure>
检查这个collective.fingerpointing package for a working example。
我正在尝试复制一个示例,该示例在应该触发 IRecordModified 时检测注册表中的更改。
https://pypi.python.org/pypi/plone.app.registry#registry-events
我尝试使它适应我正在做的事情,但我放置的打印语句没有触发。
在我的registry.xml
<registry>
<records interface="my.product.utils.db_settings.IDBSettings">
</registry>
在我的events.py
from my.product.utils.db_settings import IDBSettings
@adapter(IDBSettings, IRecordModifiedEvent)
def detectDBSettingsChange(settings, event):
print "detectDBSettingsChange"
在包含控制面板的模块 db_settings.py 中,我有: 来自 plone.app.registry.browser 导入控制面板
class IDBSettings(Interface):
db_string = schema.TextLine(title=u"Database String",
description=u"String for database connection",
default=u"Some value"
)
class DBSettingsEditForm(controlpanel.RegistryEditForm):
schema = IDBSettings
label = u"Database settings"
description = u"String setup"
def updateFields(self):
super(DBSettingsEditForm, self).updateFields()
def updateWidgets(self):
super(DBSettingsEditForm, self).updateWidgets()
class DBSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
form = DBSettingsEditForm
在我的 configure.zcml 实用程序中:
<include package="plone.app.registry" />
<browser:page
name="database-settings"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
class=".db_settings.DBSettingsControlPanel"
permission="cmf.ManagePortal"
/>
当我进入控制面板,更改值,然后保存时,detectDBSettingsChange 似乎不起作用,因为打印语句被忽略了。我是否处理了错误的事件来捕获注册表中的更改?
我认为您需要 docs. I'm not sure that the adapter in your events.py is sufficient. Perhaps you can use provideHandler Method like described in plone.registry
中描述的订阅者您需要添加订阅者并像这样在您的 configure.zcml 文件中注册:
<configure xmlns="http://namespaces.zope.org/zope">
<subscriber
for="plone.registry.interfaces.IRecordModifiedEvent"
handler="your.package.your_subscriber"
/>
</configure>
检查这个collective.fingerpointing package for a working example。