[Zope3-Users] object has no attribute '_SampleContainer__data'

Tom Dossis td at yoma.com.au
Wed Oct 5 08:36:02 EDT 2005


Jim Fulton wrote:
> Tom Dossis wrote:
>> Leticia Larrosa wrote:
>>> I get the following error:
>>> """
>>> 'Service' object has no attribute '_SampleContainer__data'
>>> """
>> I implementend a simple subclass of SampleContainer, then changed to 
>> subclass BTreeContainer, but forget to delete existing instances 
>> created in Zope.  A tell tale sign is you can no longer delete the 
>> broken instance(s)
> 
> This sounds like a bug.  Could you report this with a specific example?
> 
> Jim


I can remember exactly how I naively did this originally, but I can 
achieve it with a little sabotage..

 >>> class Bogus(BTreeContainer): pass
...
 >>> bogus = Bogus()
 >>> root['bogus'] = bogus = Bogus()
 >>> del bogus.__dict__['_SampleContainer__data']
 >>> del root['f']
Traceback (most recent call last):
   :
   File ".. /zope/interface/adapter.py", line 487, in subscribers
     subscribers = [subscription(*objects)
   File ".. /zope/app/container/contained.py", line 177, in 
dispatchToSublocations
     for sub in subs.sublocations():
   File ".. /zope/app/container/contained.py", line 208, in sublocations
     for key in container:
   File ".. /zope/app/container/sample.py", line 56, in __iter__
     return iter(self.__data)
AttributeError: 'Bogus' object has no attribute '_SampleContainer__data'


Is this a bug because the container now fails to fulfill it's interface 
causing object propogation to fail?

Is defensive programming desirable or appropriate?


<snippet1 from distpatchToSublocations>
     subs = ISublocations(object, None)
     if subs is not None:
         for sub in subs.sublocations():

<snippet2 from ContainerSublocations adapter>
     def sublocations(self)
         container = self.container
         for key in container:
             yield container[key]


-Tom


More information about the Zope3-users mailing list