from cStringIO import StringIO
import zipfile
class KMZMiddleware(object):
"""
Middleware for serving KML data or converting it to KMZ.
"""
def process_response(self, request, response):
if request.path in ('/kmz/', '/kmz/restricted/', ):
kmz = StringIO()
f = zipfile.ZipFile(kmz, 'w', zipfile.ZIP_DEFLATED)
f.writestr('doc.kml', response.content)
f.close()
response.content = kmz.getvalue()
kmz.close()
response['Content-Type'] = 'application/vnd.google-earth.kmz'
response['Content-Disposition'] = 'attachment; filename=foo.kmz'
response['Content-Description'] = 'some description'
response['Content-Length'] = str(len(response.content))
if request.path in ('/kml/', '/kml/restricted/', ):
response['Content-Type'] = 'application/vnd.google-earth.kml+xml'
response['Content-Disposition'] = 'attachment; filename=foo.kml'
response['Content-Description'] = 'some description'
response['Content-Length'] = str(len(response.content))
return response
Comments
So, in other words, KMZ is just zipped KML.
#
to scottj: no it isn't try to zip KML data to a file: you won't get a working KMZ
#