zc.sourcefactory is very handy to easily create a source (zope.schema.interfaces.IIterableSource to be precise) with corresponding titles and tokens for its contents. Every now and then a source requires an explicit interface. For zc.sourcefactory the following code snippet helps:
class IMySource(zope.schema.interfaces.IIterableSource): """my source""" class MySource( zc.sourcefactory.contextual.BasicContextualSourceFactory): """The source factory.""" class source_class( zc.sourcefactory.source.FactoredContextualSource): """This class is being instanciated by the factory. It *must* be called source_class. """ zope.interface.implements(IMySource) def getValues(self, context): …
Of course it is also possible to declare the source_class separately from the source factory and reference it. But since its sole purpose is to hold an implements declaration, I’m fine with defining it inline.