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

_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/

ZODB-Dev mailing list  -  ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev

Reply via email to