summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2010-10-04 10:53:48 -0400
committerKenneth Reitz <me@kennethreitz.com>2010-10-04 10:53:48 -0400
commit10207998284bc4dc97346ce3b9dc13efc7e883ec (patch)
treee77eb8b860782b05087c47607927d3f6eb7ce5ad /tablib
parent333e73f892d7a61e0c4dea4bbf4d5cfd4aa9c58a (diff)
downloadtablib-10207998284bc4dc97346ce3b9dc13efc7e883ec.tar.gz
Separator append and insert support.
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py47
1 files changed, 46 insertions, 1 deletions
diff --git a/tablib/core.py b/tablib/core.py
index ddb9769..1214f99 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._seperators = []
try:
self.headers = kwargs['headers']
@@ -194,6 +197,23 @@ class Dataset(object):
self._data = [tuple([row]) for row in col]
+ def insert_seperator(self, index, text='-'):
+ """Adds a seperator to Dataset at given index."""
+
+ if self.height >= index:
+ sep = (index, text)
+ self._seperators.append(sep)
+ else:
+ raise InvalidDimensions
+
+
+ def append_seperator(self, text='-'):
+ """Adds a seperator to Dataset."""
+
+ index = self.height if self.headers else (self.height - 1)
+ self.insert_seperator(index, text)
+
+
def insert(self, i, row=None, col=None):
"""Inserts a row at given position in Dataset"""
if row:
@@ -225,9 +245,11 @@ class Databook(object):
except AttributeError:
return '<databook object>'
+
def wipe(self):
"""Wipe book clean."""
self._datasets = []
+
@classmethod
def _register_formats(cls):
@@ -249,7 +271,7 @@ class Databook(object):
self._datasets.append(dataset)
else:
raise InvalidDatasetType
-
+
def _package(self):
"""Packages Databook for delivery."""
@@ -268,6 +290,29 @@ class Databook(object):
return len(self._datasets)
+def detect(stream):
+ """Return (format, stream) of given stream."""
+ for fmt in formats:
+ try:
+ if fmt.detect(stream):
+ return (fmt, stream)
+ except AttributeError:
+ pass
+ return (None, stream)
+
+
+def import_set(stream):
+ """Return dataset of given stream."""
+ (format, stream) = detect(stream)
+
+ try:
+ data = Dataset()
+ format.import_set(data, stream)
+ return data
+
+ except AttributeError, e:
+ return None
+
class InvalidDatasetType(Exception):
"Only Datasets can be added to a DataBook"