1

I need to build a configuration panel in the Plone control panel that store couples, and I'd like to use plone.app.registry on Plone 3.


If I limit myself to the user interface, it's quite simple to define a schema interface that automatically build this:

class IMyPair(Interface):
value = schema.TextLine(title=u"value", required=True)
title = schema.TextLine(title=u"title", required=False)

class MyPair(object):
    implements(IMyPair)
    def __init__(self, value='', title=''):
    self.value = value
    self.title = title

class IMyConfigPanel(Interface):

    entry = schema.List(
        title=_(u'Foo'),
        value_type=schema.Object(IMyPair, title=u"entry"),
        required=True
    )

We used this is a project that store couples inside portal_properties as a single string (with a delimiter).


Using this approach (with the "value_type=schema.Object") with plone.app.registry I get an exception as IObjectField has no IPersistent adapter defined.

Before going deeper and becoming crazy providing my own adapter: there is a simpler way to reach the initial need of my problem?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
keul
  • 7,673
  • 20
  • 45
  • I also switched to schema.Dict type of field, but z3c.form isn't supporting any widget for this right now. Bleah! – keul Jun 29 '12 at 15:28
  • Pretty sure collective.z3cform.datagridfield is a dict and works with plone.app.registry. – vangheem Jul 01 '12 at 04:18

1 Answers1

1

You should probably re-read the plone.(app.)registry docs, especially the plone.registry docs for "Persistent fields".

Not all zope.schema types are supported and for some of them you need to use the persistent variants from plone.registry.field. In general anything that's not a primitive type in Python (int, unicode, float, etc.) needs special handling. This has been a deliberate design choice to keep the registry working even if an add-on that has provided some settings is later removed from the file system.

There's examples for using plone.registry.field.Tuple in both the base docs and a GenericSetup example in the plone.app.registry docs.

  • The Hanno reply is the right one, but I found the proper documentation inside the doctest of plone.app.registry – keul Jul 03 '12 at 07:49
  • Too slow in writing my comment. I found the propert documentation for doing that insize z3c.form.browser module (see object.txt) – keul Jul 03 '12 at 08:16