Philipp von Weitershausen wrote:
Alek Kowalczyk wrote:
I have a rather big tree of MyObjects. MyObjects are adaptable to
hurry.workflow's IWorklowState. Now I'd like to create a catalog
to index all
MyObjects by their current states. How to do that? An option might
be(?) to add to MyObject property like that:
def currentState(self): return IWorkflowState(self).getState()
and index this property. But I'm not sure whether it is elegant
solution, as it requires the object to
know that it has workflow and (too) strong link between object and
Right. Fortunately, indexes know how to adapt. So, in order to
index the workflow state of your objects, configure a FieldIndex
(or ValueIndex from zc.catalog) to the IWorkflowState interface.
Specify the 'getState' attribute and check the 'callable' option
(because it's a method).
When encountering an object to be indexed, the FieldIndex (or
ValueIndex) will then try to adapt it to IWorkflowState. If that
succeeds (and it will for your MyObjects), it will call the getState
() method on that adapter and index the return value.
That worked for me with zope.app.catalog:
catalog = Catalog()
catalog[u'workflow_state'] = FieldIndex(interface=IWorkflowState,
Zope3-users mailing list