* Dario Lopez-Kästen <dario@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