On 12/14/06, Jeff Shell <[EMAIL PROTECTED]> wrote:
On 12/14/06, Florian Lindner <[EMAIL PROTECTED]> wrote:
> Hello, I have a object, derived from Persistent when contain one
> attribute which is not serializable and that's not a problem for me,
> but Zope complains about that. Can I mark this attribute somehow as
> "not to serialize" and make Zope call a member function when it has
> unserialized this object so I can reinstantiate this attribute?
What do you need to do to re-instatiate the attribute? As another
reply mentioned, you can use the Python property descriptor in
combination with an `_v_` attribute. The ZODB will not serialize an
attribute whose name starts with _v_ (v means "volatile").
Is this the IJabberClient object you were asking about a couple of
weeks ago? I just saw that thread today. Anyways, the _v_ option is
probably what you want if that is the problem.
class JabberClient(Persistent):
... (other code) ...
@property
def client(self):
if not hasattr(self, '_v_client'):
self._v_client = xmpp.Client(...)
return self._v_client
You could try using this descriptor as well (something like this might
already exist. If not, perhaps it should? This is a simple
implementation, but it should work)
class volatile(object):
""" A descriptor that reads and writes to a volatile attribute """
def __init__(self, name):
self._volatilename = '_v_%s' % name
def __get__(self, klass, inst):
if inst is None:
# return this descriptor if accessed on the class
return self
return getattr(inst, self._volatilename, None)
def __set__(self, inst, value):
""" Set the value on the instance in a volatile attribute """
setattr(inst, self._volatilename, value)
def __del__(self, inst):
""" Clear the volatile attribute """
delattr(inst, self._volatilename)
And here's how it would be used.
class JabberClient(Persistent):
... (other code) ...
client = volatile('client')
--
Jeff Shell
_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com