Here it is:
import os
import shutil
import tarfile
import tempfile
def application(environ, start_response):
status = '200 OK'
tempdir = tempfile.mkdtemp()
datafile = '%s/Data.fs' % tempdir
tarball = '%s.tar.bz2' % os.path.join(tempdir,
os.path.basename(datafile))
## If I were smarter or had more time
## I would import from repozo or at
## least use subprocess
os.system("/usr/local/zope/2.9.7/bin/repozo.py -v -z -R -r \
/usr/local/zope/sites/2.9.7/msrd/zeo/var/backup/ -o %s" % datafile)
out = tarfile.TarFile.open(tarball, 'w:bz2')
os.chdir(tempdir)
out.add('Data.fs')
out.close()
response_headers = [('Content-type', 'application/octet-stream'),
('Content-Length', str(len(open(tarball).read()))),
('Content-Disposition',
'inline; filename="Data.fs.tar.bz2"')]
start_response(status, response_headers)
try:
return [open(tarball, 'rb').read()]
finally:
shutil.rmtree(tempdir)
I did it really quick. But it solved my problem very well. It gets a copy of the Data.fs from the last repozo backup. So all developers don't need shell access to the server...
A couple things I could see doing that would make this cooler are:
- Not using os.system
- implement a method to do HEAD requests with the time of the last repozo delta so I don't compress and transfer this beast if there are no changes...
If you have mod_wsgi installed and working you just need to add something like:
WSGIScriptAlias /Data.fs.tar.bz2 /usr/local/apps/getDataArchived.py
to the appropriate configuration file.
1 comment:
Thanks for posting this link on the Plone Google group.
Post a Comment