def CreateZipFile(date, zipFileKey): #leases = OilGasLease.all().filter("date >", date) try: zipFileModel = ZipFileModel.get(db.Key(zipFileKey)) zipFileModel.status = 'running' zipFileModel.put() stream = StringIO.StringIO() zipFile = zipfile.ZipFile(stream, 'w', compression=zipfile.ZIP_DEFLATED) leases = OilGasLease.all() if date: leases = leases.filter('date >', date) s = OilGasLease.ToCsv(leases) zipFile.writestr("OilGasLease.csv", s.getvalue()) tracts = list() tempFiles = list() count = 0 try: for lease in leases: tracts.extend(lease.Tracts) if count % 100 == 0: zipFileModel.status = str(count) zipFileModel.put() count += 1 except db.Timeout: leases = OilGasLease.all() if date: leases = leases.filter('date >', date) for lease in leases.run(offset=count): tracts.extend(lease.Tracts) if csvOnly == False: DocImage.WriteToZip(lease.Images, zipFile) if count % 100 == 0: zipFileModel.status = str(count) zipFileModel.put() count += 1 zipFileModel.status = 'writing Tract data to zipfile' zipFileModel.put() s = Tract.ToCsv(tracts) zipFile.writestr("Tracts.csv", s.getvalue()) zipFile.close() blob = files.blobstore.create( mime_type='application/zip', _blobinfo_uploaded_filename='LandStreamData.zip') zipFileModel.status = 'writing zip file to blobstore' zipFileModel.put() with files.open(blob, 'a') as f: stream.seek(0) while True: buf = stream.read(2048) if buf == "": break f.write(buf) files.finalize(blob) zipFileModel.blob = files.blobstore.get_blob_key(blob) zipFileModel.status = 'done' zipFileModel.put() except Exception, detail: zipFileModel.status = repr(detail) zipFileModel.put()