Sotring __of__(self) wrapped Objects OK? (was Re: [Zope-dev]
Storing references ... accross requests)
Roché Compaan
roche at upfrontsystems.co.za
Thu Jun 17 14:24:54 EDT 2004
* Dario Lopez-Kästen <dario at ita.chalmers.se> [2004-06-17 19:55]:
> [ resend - never got to the list ]
>
> Dieter Maurer wrote:
> >Your problem can be summarized by "storing acquisition wrappers
> >(of persistent objects) across requests".
> >
> <...>
> >You cannot store them in the ZODB as acquisition wrappers cannot
> >be stored there. Currently, the ZODB silently unmantles
> >acquisition wrappers. They may be rebound on access -- but
> >this will not give you the original acquisition context and
> >behaviour can be drastically different.
>
> hello, again,
>
> I have rearranged in my product now, so that I pass along dictionaries
> to populate the classes and using a cmf-tool to provide the interface
> for the various methods of the classes.
>
> I am returning objects wrapped in __of__(self), ie.
>
> class Person(Acquisition.Implicit):
> def __init__(self data):
> ...
>
> PersonObject = Person(data).__of__(self)
> return PersonObject
>
> If I want to pickle, store and later reuse PersonObject, I suspect that
> this also creates a similar to my original one, where I wanted to store
> ZODB-references in the PersonObject.
>
>
> So should I, when pickling and storing the PersonObject, store
>
> PersonObject.aq_base
>
> rather than just PersonObject?
No, because the ZODB already strips acquisition wrappers - like Dieter
pointed out above. You only have to make sure that you wrap objects in
the original acquisition context when you retrieve them.
--
Roché Compaan
Upfront Systems http://www.upfrontsystems.co.za
More information about the Zope-Dev
mailing list