[Zope3-Users] Re: catalog of objects' states (hurry.workflow)

Tobias Rodäbel tobias.rodaebel at mac.com
Tue Jul 31 16:49:09 EDT 2007

Philipp von Weitershausen wrote:

> Alek Kowalczyk wrote:
>> Hello again,
>> 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:
>> @property
>> 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  
>> adapter.
> 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,  
field_name='getState', field_callable=True)

More information about the Zope3-users mailing list