[Product-Developers] Re: POSKeyError when indexing using External Method
Maurits van Rees
m.van.rees at zestsoftware.nl
Thu Mar 4 23:18:49 UTC 2010
Neil Stokes, on 2010-02-27:
>
> I have an external method that exposes the last editor attribute of all
> objects in the site. Code is as follows:
>
> def last_editor(self):
> """Return the last editor of an object."""
>
> jar=self._p_jar
> oid=self._p_oid
> if jar is None or oid is None: return None
> result=jar.db().history(oid)[0]['user_name']
> return result
That looks far too low level. Can't you just do something like this
(untested):
def last_editor(self):
wtool = getToolByName(self, 'portal_workflow')
review_history = wtool.getInfoFor(self, 'review_history', [])
if not review_history:
return ''
last_change = review_history[-1]
return last_change['actor']
I wrote this by looking at
Products/CMFPlone/skins/plone_deprecated/review_history.pt
> If I now go back to my site and create a new object of one of the indexable
> classes (Folder or my own object class ArchiveImage) I get a POSKeyError.
> This only occurs when adding an indexable object...I can add objects of
> other classes with no problem.
>
> If I delete the index, I can then add items of those classes again, so it
> seems there is a problem whereby the zope does not know how to update the
> index. I suspect that zope is attempting to update the index before
> committing the new object to the database, and that causes the error since
> the OID is not found.
Sounds plausible to me.
--
Maurits van Rees | http://maurits.vanrees.org/
Work | http://zestsoftware.nl/
What are you going to create today?
More information about the Product-Developers
mailing list