[Zope3-checkins] CVS: Zope3/src/persistence - wrapper.py:1.2
Sidnei da Silva
sidnei at x3ng.com.br
Wed Oct 8 09:10:40 EDT 2003
Update of /cvs-repository/Zope3/src/persistence
In directory cvs.zope.org:/tmp/cvs-serv22266/src/persistence
Added Files:
wrapper.py
Log Message:
Merging schema-utility-persistence and schema-utility-struct-failure branches. Still get a failing test, which I commented out for now.
=== Zope3/src/persistence/wrapper.py 1.1 => 1.2 ===
--- /dev/null Wed Oct 8 09:10:40 2003
+++ Zope3/src/persistence/wrapper.py Wed Oct 8 09:10:09 2003
@@ -0,0 +1,49 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Provide persistent wrappers for objects that cannot derive from
+persistence for some reason."""
+
+from persistence import Persistent
+
+class Struct(Persistent):
+ """Wraps a non-persistent object, assuming that *all* changes are
+ made through external attribute assignments.
+ """
+
+ # XXX to do this right and expose both IPersistent and the
+ # underlying object's interfaces, we'd need to use a specialized
+ # descriptor. This would create to great a dependency on
+ # zope.interface.
+
+ __class__ = property(lambda self: self.__proxied__.__class__)
+
+ def __init__(self, o):
+ self.__proxied__ = o
+
+ def __getattr__(self, name):
+ if name.startswith('_p_') or name in ['__proxied__']:
+ return super(Struct, self).__getattr__(name)
+ return getattr(self.__proxied__, name)
+
+ def __setattr__(self, name, v):
+ if name.startswith('_p_') or name in ['__proxied__']:
+ return super(Struct, self).__setattr__(name, v)
+ setattr(self.__proxied__, name, v)
+ self._p_changed = 1
+
+ def __delattr__(self, name):
+ if name.startswith('_p_') or name in ['__proxied__']:
+ return super(Struct, self).__delattr__(name)
+ delattr(self.__proxied__, name, v)
+ self._p_changed = 1
More information about the Zope3-Checkins
mailing list