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/, line 466, in createInObjectManager
> File /lib/python/OFS/, line 258, in _setObject
> File /lib/python/AccessControl/, line 393, in
> manage_setLocalRoles
> Looks like you're right -- manage_setLocalRoles.

I have patched the _objectAdding method of class Agent in

    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

        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


I'm not sure whether this will have any nasty side-effects though.

Steve Alexander
Software Engineer
Cat-Box limited

Zope-Dev maillist  -  [EMAIL PROTECTED]
**  No cross posts or HTML encoding!  **
(Related lists - )

Reply via email to