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