I have checked out your repo and replace the SourceBinderVocabulary with:
<!-- configure.zcml -->
<utility
component=".sources.italian_cities_factory"
name="italian-cities"
provides="zope.schema.interfaces.IVocabularyFactory"
/>
# source.py
from zope.interface import implementer
from zope.schema.vocabulary import SimpleTerm
from zope.schema.vocabulary import SimpleVocabulary
def italian_cities_factory(context):
return SimpleVocabulary((
SimpleTerm('Bologna', 'bologna', 'Bologna'),
SimpleTerm('Roma', 'roma', 'Roma'),
SimpleTerm('Milano', 'milano', 'Milano'),
SimpleTerm('Palermo', 'palermo', 'Palermo'),
SimpleTerm('Sorrento', 'sorrento', 'Sorrento')))
# city.py
from plone.autoform import directives
from plone.dexterity.content import Item
from plone.supermodel import model
from plone.app.z3cform.widget import AjaxSelectFieldWidget
from zope.interface import implementer
from zope import schema
class ICity(model.Schema):
""" Marker interface and Dexterity Python Schema for City
"""
city = schema.Choice(
title=u"City name",
description=u"For example: Bologna, Roma, etc...",
source="italian-cities",
)
directives.widget(
'city',
AjaxSelectFieldWidget,
source="italian-cities"
)
@implementer(ICity)
class City(Item):
"""
"""
and all is fine, no errors, no tracebacks.