Re: Sotring __of__(self) wrapped Objects OK? (was Re: [Zope-dev] Storing references ... accross requests)

2004-06-23 Thread Dario Lopez-Kästen
Dieter Maurer wrote:
Whether or not you unwrap yourself or let the ZODB do it:
you loose the acquisition context. Later when you access
your object again (load it), you must rewrap the object.
When the object is stored as an attribute of a persistent
object this rewrapping happens automatically -- but
usually not with the original context!
Thak you again, Dieter. this ie s eaxctly what I needed. The loss of the 
acquisition context is not a problem in this particuklar context, since 
the context will always be a specific path in the ZODB (the path to the 
instance of a cmf-tool).

Thanks again.
/dario
--
-- ---
Dario Lopez-Kästen, IT Systems & Services Chalmers University of Tech.
___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )


Re: Sotring __of__(self) wrapped Objects OK? (was Re: [Zope-dev] Storing references ... accross requests)

2004-06-23 Thread Dieter Maurer
Dario Lopez-Kästen wrote at 2004-6-17 11:01 +0200:
>[ resend - never got to the list ]

Zope's mailing lists currently seem to have problems...
Traffic volume is down to a trickle, at least as seen from here...

> ...
>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?

You cannot pickle acquisition wrappers, it simply will not work.


The current ZODB code allows you to store wrapped objects as
attributes of persistent objects. It catches the resulting
pickling exception, unwraps the object and tries again.


Whether or not you unwrap yourself or let the ZODB do it:
you loose the acquisition context. Later when you access
your object again (load it), you must rewrap the object.
When the object is stored as an attribute of a persistent
object this rewrapping happens automatically -- but
usually not with the original context!

-- 
Dieter

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )


Re: Sotring __of__(self) wrapped Objects OK? (was Re: [Zope-dev] Storing references ... accross requests)

2004-06-23 Thread Roché Compaan
* Dario Lopez-Kästen <[EMAIL PROTECTED]> [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

___
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )