[Zope] Copying Objects of a Python Class
Thomas Guettler
zopestoller@thomas-guettler.de
Wed, 24 Apr 2002 17:51:50 +0200
Hi!
If I copy an instance of a python class (I am developing a python product)
I got the problem that it does a deep copy. The original
has a attribute called default_catalog which is
a reference to the catalog where all objects are stored.
If I do a copy, there is a unfortunately
a new object (default_catalog). But it should be a reference
to the catalog where all objects are stored.
I store a template in the folder 'defaults' and want
to copy it to 'documents'. (Layout: root/defaults root/documents)
In the Object which gets copied:
def createNewDocument(self, REQUEST=None):
r=self.root()
orig=r.defaults[self.id]
copy=orig._getCopy(r)
# Stolen form CopySupport.manage_clone. Don't know what it does
copy=copy.__of__(orig)
copy.id=r.nextID()
copy.isDefaultDocument=0
r.documents._setObject(copy.id, copy) # TODO: Btree
if copy.default_catalog!=orig.default_catalog:
print "orig", orig.default_catalog
print "copy", copy.default_catalog
raise "Bad Copy"
if REQUEST:
REQUEST.RESPONSE.redirect('/' + r.id + '/documents/' + copy.id)
The log:
orig <ZCatalog instance at 02633AB8>
copy <ZCatalog instance at 02522EC0>
--> there is a new object
_getCopy does this (From Zope's CopySupport.py):
def _getCopy(self, container):
# Ask an object for a new copy of itself.
f=tempfile.TemporaryFile()
self._p_jar.exportFile(self._p_oid,f)
f.seek(0)
ob=container._p_jar.importFile(f)
f.close()
return ob
I think the export and reimport creates new objects.
I think I will write my own copy method and don't use _getCopy except
someone has a solution
Thank you for listening.
thomas