martes 16 de febrero de 2010

Generar archivo CSV para descargar en APPENGINE

Para generar un archivo CSV que funcione como una liga que permita descargar el archivo es necesario seguir los siguientes pasos:

1.- Crear la url



En el archivo donde se creen las ligas entre las clases y las url (lazy loading)

application = webapp.WSGIApplication([ 
("/csv",Csv),
], debug=False)

def main():
run_wsgi_app(application)



2.- Generar el CSV



En la clase Csv se genera el string y el handler para manejar las peticiones get del servidor.

import wsgiref.handlers 
import StringIO
from google.appengine.ext import webapp

class Csv(webapp.RequestHandler):
def get(self):
out=StringIO.StringIO()
cabeceras="..." #defino las cabeceras de los campos del csv
out.write(cabeceras)
MisDatos="..."#Obtengo los datos de alguna fuente, muy probablemente del DataStore
for renglon in MisDatos:
csv=""
csv=csv+"..."+"|"# obtengo los datos necesarios agregandolos a la variable csv
#continuo asi....
csv=csv+"\n" #eol
out.write(csv)
#agrego los header para que se comporte como archivo
self.response.headers["Content-Type"] = "application/vnd.ms-excel"
self.response.out.write(out.getvalue())


Agrego un link en el template



<a href="/csv">csv</a>


y listo....