
charlie at begeistert
Feb 13, 2008, 2:14 PM
Post #3 of 4
(364 views)
Permalink
|
Am 13.02.2008 um 13:16 schrieb Wichert Akkerman: > vocabulary factories take a context as argument. > > This vocabulary is already implemented in plone.app.vocabularies, you > can just use that: > http://dev.plone.org/plone/browser/plone.app.vocabularies/trunk/plone/app/vocabularies/types.py Thanks very much for this. Would it be possible to include the two portal_types vocabularies in CMFDefault? I got the vocabulary in my view class but then I got an Assertion Error relating to it: 2008-02-13 21:16:34 ERROR Zope.SiteErrorLog http://localhost:8080/new/b/@@edit.html Traceback (innermost last): Module ZPublisher.Publish, line 119, in publish Module ZPublisher.mapply, line 88, in mapply Module ZPublisher.Publish, line 42, in call_object Module zope.formlib.form, line 769, in __call__ Module Products.Five.formlib.formbase, line 55, in update Module zope.formlib.form, line 732, in update Module Products.camaoCms.browser.masterpage, line 86, in setUpWidgets Module Products.CMFDefault.formlib.form, line 117, in setUpWidgets Module zope.formlib.form, line 379, in setUpEditWidgets Module zope.schema._field, line 244, in bind AssertionError Looking at the source: def bind(self, object): """See zope.schema._bootstrapinterfaces.IField.""" clone = super(Choice, self).bind(object) # get registered vocabulary if needed: if IContextSourceBinder.providedBy(self.vocabulary): clone.vocabulary = self.vocabulary(object) assert ISource.providedBy(clone.vocabulary) elif clone.vocabulary is None and self.vocabularyName is not None: vr = getVocabularyRegistry() clone.vocabulary = vr.get(object, self.vocabularyName) assert ISource.providedBy(clone.vocabulary) looks like I'm a victiom of copy & paste programming (again! ;-) The vocabulary definitely doesn't provide ISource but I can't seem to get this to work: either by adding it as a parameter to implements() or in ZCML leads to a lookup error: ComponentLookupError: (<InterfaceClass zope.schema.interfaces.IVocabularyFactory>, 'cmf.UserFriendlyContentTypes') mm, guess I need to double check my declarations. I thought that implements(IMyInterface) is equivalent to provides="...IMyInterface" in ZCML BTW. this is probably academic but I noticed the top of the types.py is from zope.app.schema.vocabulary import IVocabularyFactory Is there a reason for not importing the interface directly? I'll also be reading up ISource in Philip's book. Charlie -- Charlie Clark Helmholtzstr. 20 Düsseldorf D- 40215 Tel: +49-211-938-5360 GSM: +49-178-782-6226 _______________________________________________ Zope-CMF maillist - Zope-CMF[at]lists.zope.org http://mail.zope.org/mailman/listinfo/zope-cmf See http://collector.zope.org/CMF for bug reports and feature requests
|