[Zope3-Users] Re: NotYet error when creating content during container creation

Philipp von Weitershausen philipp at weitershausen.de
Wed Feb 28 12:03:13 EST 2007


Alek Kowalczyk wrote:
> FB <fbo2 at ...> writes:
>  
>> 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
>         # ...
> 

Why not write a custom IKeyReference adapter that doesn't raise the 
exception? You could even let the adaption fail completely so that the 
addIntIdSubscriber gets a None for 'key' and doesn't proceed:

@adapter(YourClass)
def keyReference(obj):
     return None # adaption failed on purpose, don't want key references


-- 
http://worldcookery.com -- Professional Zope documentation and training
Next Zope 3 training at Camp5: http://trizpug.org/boot-camp/camp5



More information about the Zope3-users mailing list