File contents
from os import path, sep, makedirs
objectList = []
def walk(folder, lookup):
# recursive walk fn
global objectList
objs = folder.objectValues(lookup.keys())
for obj in objs:
objectList.append(obj)
if getattr(obj, 'isPrincipiaFolderish', None):
walk(obj, lookup)
def write(folder, lookup):
# write fn
global objectList
for obj in objectList:
# ie ignore folders...
mt = str(obj.meta_type)
if lookup[mt] is None: continue
# for win, but shouldnt matter
dest = obj.absolute_url(1).replace('/', sep)
dest = path.join(folder, dest)
# the dir
destDir = sep.join(dest.split(sep)[:-1])
if not path.exists(destDir): makedirs(destDir)
# write out the object
if not dest.endswith(lookup[mt]):
dest = dest + lookup[mt]
fh = open(dest, 'wb')
if mt == 'Image':
fh.write(str(obj.data))
else:
fh.write(obj.document_src())
fh.close()
# the object properties...
# wierd propertyMap dont seem to work...
props = obj.propertyIds()
if props:
# hack for python scripts
if props == ['title',] and mt == 'Script (Python)': continue
pdest = dest + '.properties'
fh = open(pdest, 'w')
for prop in props: fh.write("%s=%s\n" % (prop, getattr(obj, prop)))
fh.close()
def setup(folder, name):
if not path.exists(folder): makedirs(folder)
# touch refresh.txt
open(path.join(folder, 'refresh.txt'), 'w').close()
fh = open(path.join(folder, '__init__.py'), 'w')
# register the name of the folder
fh.write("""
from Products.FileSystemSite.DirectoryView import registerDirectory
registerDirectory('%s', globals())""" % name)
fh.close()
def zodb2fs(self):
# some variables to set
# the folder to rummage through
zopeFolder = self
# the destination on the fs to write to
# note, this doesnt have to be, but is recommended
# to be in the instance_home, so then
# the __init__.py will register the directory as a product
# if the name of the folder in products is zodb2fs, then
# the product name in the control panel will be zodb2fs
destFolder = r'/home/andy/FatSite'
# the object mapping of object to ext
# any objects not in this list will be ignored
objectDict = {
'DTML Document':'.ddoc',
'Script (Python)':'.py',
'DTML Method':'.dtml',
'Image':'',
'Folder':None,
}
setup(destFolder, zopeFolder.getId())
walk(zopeFolder, objectDict)
write(destFolder, objectDict)
return "Done"