[Zope-dev] TreeVocabulary in zope.schema.vocabulary
Jan-Carel Brand
lists at opkode.com
Tue Jan 24 23:55:28 UTC 2012
On Wed, 2012-01-25 at 00:52 +0200, Marius Gedminas wrote:
> On Tue, Jan 24, 2012 at 07:34:03PM +0200, Jan-Carel Brand wrote:
> > > Missing tests: by inheriting from SimpleVocabulary you also gain
> > > .fromItems() and .fromValues(). Do those work? They pass a list of
> > > terms to __init__, which seems to expect a dict now. Override and add a
> > > raise NotImplementedError? Or just make them work?
> >
> > I now subclass PersistentMapping instead of SimpleVocabulary, so this is
> > not an issue anymore.
>
> Ok. But why Persistent? None of the other vocabularies are
> persistent...
Yeah, using PersistentMapping was a mistake, firstly because persistence
is not necessary and secondly because it introduces a dependency on
Persistence.
> > > What's the use case for a tree vocabulary? A widget that displays the
> > > tree structure explicitly?
> >
> > Yes. In my case, it's for the widget in collective.dynatree. This is a
> > fairly common use-case in Plone. Products.ATVocabularyManager also has
> > hierarchical vocabularies.
>
> *nod*
>
> > > It seems... difficult to extract that
> > > tree structure using just the public API. Actually, it's impossible:
> > > __iter__ doesn't return all the terms, just top-level ones. Am I
> > > missing something?
> >
> > I've changed the TreeVocabulary to subclass from PersistentDict. So the
> > vocabulary itself now acts as a dict.
>
> So is it PersistentMapping or PersistentDict then? ;)
It was first the one, and then the other :)
> > > > Perhaps I should rephrase :)
> > > >
> > > > I would like my changes to be merged with the zope.schema trunk. The
> > > > tests I've added provide 100% coverage of the TreeVocabulary code.
> > > >
> > > > I would just like someone to sign it off.
> > >
> > > -1 because of the concerns above.
> >
> > Fair enough. Have your concerns been addressed properly?
>
> Thank you, yes.
>
> I'm still wondering about the possibility of ordered trees.
Python 2.7 has an OrderedDict class in the collections module:
http://docs.python.org/dev/whatsnew/2.7.html#pep-0372
> And I'm -1 for subclassing PersistentMapping. It may tempt people into
> storing tree vocabularies in the ZODB, and then maybe even modifying
> them. And you have plenty of non-persistent dicts in the internal
> structure.
>
> I think it would be better to subclass a regular dict, and document that
> you ITreeVocabulary is a dict-like object by making it inherit
> IEnumerableMapping.
Thanks for the suggestion, I did that.
JC
More information about the Zope-Dev
mailing list