> It tries that, because it's handler is called by the container's __setitem__
> method. Just write your own - like that:
> class MyContainer(BTreeContainer):
>    def __setitem__(self,key,object)
>       object.__parent__=self
>       object.__name__=key
>       self.__data[key]=object
>    def __delitem__(self,key):
>       del self.__data[key]
> (Not testet!)
> However, you might not need a BTreeContainer but just a simple
> BTrees.OOBTree.OOBtree which behaves like a dict but is a btree.

I don't think I would like to redesign my objects just because the
addIntIdSubscriber does not catch NotYet when getting IKeyReference:

@adapter(ILocation, IObjectAddedEvent)
def addIntIdSubscriber(ob, event):
    # ...
    utilities = tuple(getAllUtilitiesRegisteredFor(IIntIds))
    if utilities: # assert that there are any utilites
        key = IKeyReference(ob, None) # HERE IS RAISED EXCEPTION
        # ...

Is there a way to override .addIntIdSubscriber in overrides.zcml or another way?
I would write my own version which is more forgiving and does not allow to go
out NotYet raised in IKeyReference adapter.

Zope3-users mailing list

Reply via email to