diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2010-10-04 10:53:48 -0400 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2010-10-04 10:53:48 -0400 |
| commit | 10207998284bc4dc97346ce3b9dc13efc7e883ec (patch) | |
| tree | e77eb8b860782b05087c47607927d3f6eb7ce5ad /tablib | |
| parent | 333e73f892d7a61e0c4dea4bbf4d5cfd4aa9c58a (diff) | |
| download | tablib-10207998284bc4dc97346ce3b9dc13efc7e883ec.tar.gz | |
Separator append and insert support.
Diffstat (limited to 'tablib')
| -rw-r--r-- | tablib/core.py | 47 |
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" |
