[Grok-dev] Re: Recipe - How to create a vocabulary that allows the
display of non-ASCII characters
Philipp von Weitershausen
philipp at weitershausen.de
Mon Sep 24 12:23:29 EDT 2007
Sebastian Ware wrote:
> I just want to pitch my idea of what a recipe might look like. In this
> case showing how to create a vocabulary that displays unicode titles.
>
> Mvh Sebastian
>
> ** Recipe - How to create a vocabulary that allows the display of
> non-ASCII characters **
> Keywords: Recipe, Vocabulary, Unicode, Global Utility
>
> How to create a vocabulary that displays non-ASCII titles. Useful for
> use with zope.schema.Choice fields. The title of each term that is to be
> displayed can be Unicode strings.
>
> [code:vocabulary.py]
> from zope import schema
> from zope.schema.vocabulary import SimpleVocabulary
> from hurry import query
>
> class VocabularySource(object):
>
> def __call__(self, context):
> # Get a list of objects (I am using hurry.query to search a
> catalog)
> theQuery = query.Eq(('workflow_catalog', 'workflow_state'),
> interfaces.PUBLISHED)
> result = query.query.Query().searchResults(theQuery)
> # For each object, add it as a list of terms
> (zope.schema.vocabulary.SimpleTerm)
> # creating each term with SimpleVocabulary.createTerm(value,
> token, title). This
> # allows the title to be unicode, the token has to be ASCII (and
> can be the
> # same as value).
> theTerms = []
> for item in result:
> theTerms.append(SimpleVocabulary.createTerm(item.__name__,
> item.iso_code,
> item.title))
> return SimpleVocabulary(theTerms)
>
> # Register the vocabulary as a global utility.
> grok.global_utility(VocabularySource,
> provides=schema.interfaces.IVocabularyFactory,
> name=u'Published Objects')
> [/code]
This is weird. You're registering this as a utility providing
IVocabularyFactory, but the object doesn't actually implement it. This
can actually be implemented much more easily:
class MyVocabularyFactory(grok.GlobalUtility):
grok.implements(IVocabularyFactory)
grok.name(u'Published Objects')
def __call__(self, context):
...
No further registration necessary.
--
http://worldcookery.com -- Professional Zope documentation and training
More information about the Grok-dev
mailing list