Simple decorator for CherryPy/TurboGears useful for publishing some data as a CSV file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def expose_as_csv(f):
@expose()
@strongly_expire
def wrap(*args, **kw):
rows = f(*args, **kw)
out = StringIO.StringIO()
writer = csv.writer(out) #quoting=csv.QUOTE_ALL
writer.writerows(rows)
cherrypy.response.headerMap["Content-Type"] = "text/csv"
cherrypy.response.headerMap["Content-Length"] = out.len
return out.getvalue()
return wrap
# Usage
class Root(...
@expose_as_csv
def somereport_csv(self):
data = [('a', 1), ('b', 2), ('c', 3)]
return data
# Test
wget http://yourdomain/somereport.csv
|
Tags: web