Steve Alexander wrote:
"Phillip J. Eby" wrote:
This would explain why you only get a change event, since if add happens after change, it is ignored. I'm curious how the change event is getting called first, since... Oh. I'll bet I know what it is. It's probably that manage_afterAdd is being called later in the ObjectManager code than it used to be, and/or Zope is trying to set an _owner attribute on the newly added object. Crap. This is going to take some rethinking to find another way to trap the Zope "add" event. :(
If it saves you any time, here's part of a traceback from an exception raised in _objectChanging():
File /lib/python/ZClasses/ZClass.py, line 466, in createInObjectManager File /lib/python/OFS/ObjectManager.py, line 258, in _setObject File /lib/python/AccessControl/Role.py, line 393, in manage_setLocalRoles
Looks like you're right -- manage_setLocalRoles.
I have patched the _objectAdding method of class Agent in Agents.py: def _objectAdding(self,client, _id=_id): print "_objectAdding" i = _id(client) l = self._v_tranlog c = l.get(i) if c is None: l[i] = AddedStatus, client, None return s,c,m = c # XXX Hack to make "add" triggers work if s is ChangedStatus: l[i] = AddedStatus, client, m # XXX if s is DeletedStatus: l[i] = ChangedStatus, client, m return I'm not sure whether this will have any nasty side-effects though. -- Steve Alexander Software Engineer Cat-Box limited http://www.cat-box.net