summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2010-10-04 11:52:12 -0400
committerKenneth Reitz <me@kennethreitz.com>2010-10-04 11:52:12 -0400
commitc612bb3dae663b076acdd4e6edada1b9a276f9af (patch)
treec16861b7dbe60128e648488f70e746decbf1f991 /tablib
parentbfe70066b8a4a635de3c4ef9cdbcb51cace8152a (diff)
parentc223dfbdf12bfa9ec6458184b83ac3e458efb185 (diff)
downloadtablib-c612bb3dae663b076acdd4e6edada1b9a276f9af.tar.gz
Merge branch 'master' into develop
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py29
-rw-r--r--tablib/formats/_xls.py42
2 files changed, 59 insertions, 12 deletions
diff --git a/tablib/core.py b/tablib/core.py
index a7a2963..90ef2b0 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -20,6 +20,9 @@ class Dataset(object):
def __init__(self, *args, **kwargs):
self._data = list(args)
self.__headers = None
+
+ # ('title', index) tuples
+ self._separators = []
try:
self.headers = kwargs['headers']
@@ -33,6 +36,7 @@ class Dataset(object):
self._register_formats()
+
def __len__(self):
return self.height
@@ -203,7 +207,26 @@ class Dataset(object):
self._data = [tuple([row]) for row in col]
- def insert(self, i, row=None, col=None):
+ def insert_separator(self, index, text='-'):
+ """Adds a separator to Dataset at given index."""
+
+ sep = (index, text)
+ self._separators.append(sep)
+
+
+ def append_separator(self, text='-'):
+ """Adds a separator to Dataset."""
+
+ # change offsets if headers are or aren't defined
+ if not self.headers:
+ index = self.height if self.height else 0
+ else:
+ index = (self.height + 1) if self.height else 1
+
+ self.insert_separator(index, text)
+
+
+ def insert(self, i, row=None):
"""Inserts a row at given position in Dataset"""
if row:
self._validate(row)
@@ -234,9 +257,11 @@ class Databook(object):
except AttributeError:
return '<databook object>'
+
def wipe(self):
"""Wipe book clean."""
self._datasets = []
+
@classmethod
def _register_formats(cls):
@@ -258,7 +283,7 @@ class Databook(object):
self._datasets.append(dataset)
else:
raise InvalidDatasetType
-
+
def _package(self):
"""Packages Databook for delivery."""
diff --git a/tablib/formats/_xls.py b/tablib/formats/_xls.py
index 1a739af..76e9318 100644
--- a/tablib/formats/_xls.py
+++ b/tablib/formats/_xls.py
@@ -9,7 +9,8 @@ import cStringIO
title = 'xls'
extentions = ('xls',)
-
+wrap = xlwt.easyxf("alignment: wrap on")
+bold = xlwt.easyxf("font: bold on")
def export_set(dataset):
"""Returns XLS representation of Dataset."""
@@ -17,10 +18,8 @@ def export_set(dataset):
wb = xlwt.Workbook(encoding='utf8')
ws = wb.add_sheet(dataset.title if dataset.title else 'Tabbed Dataset')
- for i, row in enumerate(dataset._package(dicts=False)):
- for j, col in enumerate(row):
- ws.write(i, j, col)
-
+ dset_sheet(dataset, ws)
+
stream = cStringIO.StringIO()
wb.save(stream)
return stream.getvalue()
@@ -34,12 +33,35 @@ def export_book(databook):
for i, dset in enumerate(databook._datasets):
ws = wb.add_sheet(dset.title if dset.title else 'Sheet%s' % (i))
- #for row in self._package(dicts=False):
- for i, row in enumerate(dset._package(dicts=False)):
- for j, col in enumerate(row):
- ws.write(i, j, col)
+ dset_sheet(dset, ws)
stream = cStringIO.StringIO()
wb.save(stream)
- return stream.getvalue() \ No newline at end of file
+ return stream.getvalue()
+
+
+def dset_sheet(dataset, ws):
+ """Completes given worksheet from given Dataset."""
+ _package = dataset._package(dicts=False)
+
+ for i, sep in enumerate(dataset._separators):
+ _offset = i
+ _package.insert((sep[0] + _offset), (sep[1],))
+
+ for i, row in enumerate(_package):
+ for j, col in enumerate(row):
+
+ # bold headers
+ if (i == 0) and dataset.headers:
+ ws.write(i, j, col, bold)
+
+ # bold separators
+ elif len(row) < dataset.width:
+ ws.write(i, j, col, bold)
+
+ # wrap the rest
+ else:
+ ws.write(i, j, col, wrap)
+
+ \ No newline at end of file