"""CGIWrapper dump CSV admin script."""
import os
from WebUtils.Funcs import htmlEncode
from AdminPage import AdminPage
def LoadCSV(filename):
"""Load CSV file.
Loads a CSV (comma-separated value) file from disk and returns it as a
list of rows where each row is a list of values (which are always strings).
"""
try:
f = open(filename)
try:
rows = []
while 1:
line = f.readline()
if not line:
break
rows.append(line.split(','))
finally:
f.close()
except IOError:
rows = []
return rows
class _dumpCSV(AdminPage):
"""CGIWrapper class that dumps a CSV file."""
def __init__(self, dict):
AdminPage.__init__(self, dict)
self._filename = self._fields['filename'].value
def shortFilename(self):
return os.path.splitext(os.path.split(self._filename)[1])[0]
def title(self):
return 'View ' + self.shortFilename()
def writeBody(self):
rows = LoadCSV(self._filename)
self.writeln('<table align="center" border="0" cellpadding="2" cellspacing="2">')
# Head row gets special formatting
self._headings = map(lambda name: name.strip(), rows[0])
self.writeln('<tr>')
for value in self._headings:
self.writeln('<th style="color:white;font-family:Arial,Helvetica,sans-serif" bgcolor="#101040">',
value, '</th>')
self.writeln('</tr>')
# Data rows
rowIndex = 1
for row in rows[1:]:
self.writeln('<tr>')
colIndex = 0
for value in row:
self.writeln('<td style="color:#111111" bgcolor="#EEEEEE">',
self.cellContents(rowIndex, colIndex, value), '</td>')
colIndex += 1
self.writeln('</tr>')
rowIndex += 1
self.writeln('</table>')
def cellContents(self, rowIndex, colIndex, value):
"""Return cell contents of CSV file.
This is a hook for subclasses to customize the contents of a cell
based on any criteria (including location).
"""
return htmlEncode(value)
|