[Checkins]
SVN: z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py
Tried an evolution script with lower memory needs.
Uwe Oestermeier
u.oestermeier at iwm-kmrc.de
Wed Nov 14 12:08:10 EST 2007
Log message for revision 81842:
Tried an evolution script with lower memory needs.
Changed:
U z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py
-=-
Modified: z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py
===================================================================
--- z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py 2007-11-14 16:06:32 UTC (rev 81841)
+++ z3c.blobfile/trunk/src/z3c/blobfile/generations/evolve1.py 2007-11-14 17:08:10 UTC (rev 81842)
@@ -1,4 +1,5 @@
import logging
+import transaction
import zope.interface
import zope.component
@@ -13,6 +14,22 @@
import z3c.blobfile.image
+def changeImplementation(file, klass):
+ file._blob = Blob()
+ _data = file.__dict__['_data']
+ del file.__dict__['_data']
+ file.__class__ = klass
+ fp = file.open('w')
+ if isinstance(_data, zope.app.file.file.FileChunk):
+ fp.write(_data._data)
+ del _data._data
+ _data = _data.next
+ else:
+ fp.write(_data)
+ del _data
+ fp.close()
+
+
def evolveZopeAppFile(root):
"""Replaces the classes and data of zope.app.file objects.
@@ -20,25 +37,18 @@
Doesn't throw an ObjectModify event.
"""
for file in findObjectsProviding(root, IFile):
- data = file.data
- file._blob = Blob()
-
if isinstance(file, zope.app.file.File):
- file.__class__ = z3c.blobfile.file.File
- file.data = data
- continue
-
- if isinstance(file, zope.app.file.Image):
- file.__class__ = z3c.blobfile.image.Image
- file.data = data
- continue
-
- logging.getLogger('z3c.blobfile.generations').warn(
+ changeImplementation(file, z3c.blobfile.file.File)
+ elif isinstance(file, zope.app.file.Image):
+ changeImplementation(file, z3c.blobfile.image.Image)
+ else:
+ logging.getLogger('z3c.blobfile.generations').warn(
'Unknown zope.app.file.interfaces.IFile implementation %s.%s' % (
file.__class__.__module__,
file.__class__.__name__))
-
+ transaction.savepoint(optimistic=True)
+
def evolve(context):
"""
Replaces all zope.app.file content objects with z3c.blobfile counterparts.
More information about the Checkins
mailing list