Source code for libreport.csvreport
import os
import csv
import StringIO
from datetime import datetime
from django.template import Template, Context
from django.http import HttpResponse
[docs]class CSVReport():
'''
CSVReport Is a class that creates raw CSV reports::
csvrpt = PDFRreport()
csvrpt.setLandscape(False)
csvrpt.setTitle("Title")
csvrpt.setTableData(queryset, fields, "Table Title")
csvrpt.setFilename("filename")
csvrpt.render()
'''
title = "Report"
filename = "report"
pageinfo = None
styles = None
landscape = None
hasfooter = None
headers = None
cols = None
PAGESIZE = None
fontSize = None
def __init__(self):
self.output = StringIO.StringIO()
self.csvio = csv.writer(self.output)
self.data = []
# compatibility with PDFReport
def setLandscape(self, state):
pass
def enableFooter(self, state):
pass
def setTitle(self, title):
pass
def setPageInfo(self, pageinfo):
pass
def setFontSize(self, size):
pass
def setNumOfColumns(self, cols):
pass
[docs] def setFilename(self, filename):
"""
:param filename: filename for the generated pdf document
"""
if filename:
self.filename = filename
[docs] def setPageBreak(self):
"""force a page break
"""
self.data.append("")
[docs] def setTableData(self, queryset, fields, title):
"""set table data
:param queryset: data
:param fields: table column headings
:param title: Table Heading
"""
header = False
for row in queryset:
if not header:
self.data.append([f["name"] for f in fields])
header = True
ctx = Context({"object": row})
values = [Template(h["bit"]).render(ctx) for h in fields]
self.data.append(values)
def render(self):
filename = self.filename + datetime.now().strftime("%Y%m%d%H%M%S")\
+ ".csv"
for data in self.data:
self.csvio.writerow(data)
response = HttpResponse(mimetype='text/csv')
response['Cache-Control'] = ""
response['Content-Disposition'] = "attachment; filename=%s" % filename
response.write(self.output.getvalue())
return response