[ZODB-Dev] Problems with ZODB3-3.9.0_dev_r77011

Tobias Rodäbel tobias.rodaebel at mac.com
Thu Jul 19 18:36:31 EDT 2007


Hi Gary,

thanks a lot for your response!

Am 19.07.2007 um 15:52 schrieb Gary Poster:

> - Is this consistently reproduceable, or intermittent?  Unless you  
> are intentionally creating a conflict in a test, any errors in the  
> changes in 3.9 would be more likely to be intermittent.

It is consistently reproduceable.

> - Even better, can you construct a small, distributable test case?   
> That would certainly invite more help.
> - Have you tried to reproduce with the most recent  
> zope.app.keyreference in the 3.4 line and the most recent ZODB 3.8  
> line?  If so, that might get Jim's attention, and would rule out  
> the relatively small changes in the 3.9 dev egg.  Unless you like  
> riding the bleeding edge, I might suggest using those earlier  
> versions for now anyway.

I did. It worked well. Here are some code snippets I use concerning  
to this problem, I guess. Maybe it has something to do with that  
location.LocationProxy thing. (I found most of the code here http:// 
readlist.com/lists/zope.org/zope3-users/0/2518.html )


from zope import location
from zope.schema.fieldproperty import FieldProperty


class Locatable(object):
     """Wrap a FieldProperty descriptor to make it's field locatable.
         [...]
     """
     def __init__(self, descriptor):
         self.descriptor = descriptor
         self.name = self.descriptor._FieldProperty__name

     def __get__(self, inst, cls):
         ob = self.descriptor.__get__(inst, cls)
         if ob is not None:
             if location.interfaces.ILocation(ob, None) is None:
                 ob = location.LocationProxy(ob, inst, self.name)
         return ob

     def __set__(self, inst, ob):
         self.descriptor.__set__(inst, ob)


def LocatableProperty(field_or_descriptor):
     """A property which ensures a field instance is locatable.
     """
     try:
         field_or_descriptor.__get__
         field_or_descriptor.__set__
         return Locatable(field_or_descriptor)
     except AttributeError:
         return Locatable(FieldProperty(field_or_descriptor))


class IMyItem(Interface):

     image = Object(
         title=_(u'Image'),
         description=_(u'The image'),
         schema=IImage,
         required=False)


class MyItem(Persistent):

     implements(IMyItem)

     __name__ = __parent__ = None

     image = LocatableProperty(IMyItem['image'])


Regards,
Tobias



More information about the ZODB-Dev mailing list