Using Plone 5 and doing add-on development.
I'm able to use the vocabulary in a schema.Choice field outside the schema.Dict. I'm unsure how to correct this issue, any thoughts on the matter are very welcome.
class IThreeFrameRun(IVeracisRunBase):
aliquot_to_well = schema.Dict(
key_type=schema.TextLine(title=u"Aliquot ID"),
value_type=schema.Choice(source=IChipsAllVocabulary)
returns the following error
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module plone.z3cform.layout, line 66, in call
Module plone.z3cform.layout, line 50, in update
Module plone.dexterity.browser.add, line 130, in update
Module plone.z3cform.fieldsets.extensible, line 59, in update
Module plone.z3cform.patch, line 30, in GroupForm_update
Module z3c.form.group, line 132, in update
Module z3c.form.form, line 136, in updateWidgets
Module z3c.form.field, line 277, in update
Module z3c.form.browser.multi, line 65, in update
Module plone.app.z3cform.csrf, line 21, in execute
Module z3c.form.action, line 98, in execute
Module z3c.form.button, line 315, in call
Module z3c.form.button, line 170, in call
Module z3c.form.browser.multi, line 71, in handleAdd
Module z3c.form.widget, line 355, in appendAddingWidget
Module z3c.form.widget, line 343, in getWidget
Module z3c.form.browser.select, line 51, in update
Module z3c.form.browser.widget, line 171, in update
Module z3c.form.widget, line 233, in update
Module z3c.form.widget, line 227, in updateTerms
Module zope.component._api, line 107, in getMultiAdapter
Module zope.component._api, line 120, in queryMultiAdapter
Module zope.component.registry, line 238, in queryMultiAdapter
Module zope.interface.adapter, line 532, in queryMultiAdapter
Module z3c.form.term, line 104, in ChoiceTerms
Module zope.schema._field, line 309, in bind
Module immunarray.lims.vocabularies.ichip, line 49, in call
Module Products.CMFCore.utils, line 13, in check_getToolByName
Module Products.CMFCore.utils, line 120, in getToolByName
AttributeError: portal_catalog
Code for vocab creation
@implementer(IVocabularyFactory, IContextSourceBinder)
class IChipsAll(object):
#want to not have v.status = 'Retired (No Longer Offered)'
def __call__(self, context):
catalog = getToolByName(context, 'portal_catalog')
values = catalog(portal_type='iChip')
names = [([v.id]) for v in values]
normalizer = queryUtility(IIDNormalizer)
items = [(n, normalizer.normalize(n).upper()) for n in names]
return SimpleVocabulary.fromItems(items)
IChipsAllVocabulary = IChipsAll()
alsoProvides(IChipsAll, IFormFieldProvider)