diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2010-09-08 18:06:25 -0400 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2010-09-08 18:06:25 -0400 |
| commit | 310400af5b3696be2cfd2f0816f7f621d945033f (patch) | |
| tree | aaaa73230ccf2221ef9fdc19ef2dffdae5a15c69 /tablib | |
| parent | 9f025dc1112d9b9986566143af45ae5620a8f2c8 (diff) | |
| parent | d52537b75b016a9d8128998236badd980848394f (diff) | |
| download | tablib-310400af5b3696be2cfd2f0816f7f621d945033f.tar.gz | |
Merge branch 'feature/paged' into develop
Diffstat (limited to 'tablib')
| -rw-r--r-- | tablib/core.py | 80 | ||||
| -rw-r--r-- | tablib/tests/tests.py | 39 |
2 files changed, 93 insertions, 26 deletions
diff --git a/tablib/core.py b/tablib/core.py index 6ce9316..929ef07 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -14,15 +14,17 @@ import os from helpers import * from packages import simplejson as json from packages import xlwt +import random + try: import yaml except ImportError, why: from packages import yaml - -__all__ = ['Dataset', 'source'] + +__all__ = ['Dataset', 'DataBook', 'source'] __name__ = 'tablib' __version__ = '0.0.4' @@ -43,8 +45,6 @@ class Dataset(object): self._data = None self._saved_file = None self._saved_format = None - - self._data = list(args) try: @@ -57,11 +57,11 @@ class Dataset(object): except KeyError, why: self.title = None - + def __len__(self): return self.height - + def __getitem__(self, key): if is_string(key): if key in self.headers: @@ -81,7 +81,7 @@ class Dataset(object): def __delitem__(self, key): del self._data[key] - + def __repr__(self): if self.title: return '<%s dataset>' % (self.title.lower()) @@ -131,13 +131,13 @@ class Dataset(object): except KeyError, why: return 0 - + @property def json(self): """Returns JSON representation of Dataset.""" return json.dumps(self._package()) - + @property def yaml(self): """Returns YAML representation of Dataset.""" @@ -152,7 +152,7 @@ class Dataset(object): for row in self._package(dicts=False): _csv.writerow(row) - + return stream.getvalue() @@ -160,7 +160,7 @@ class Dataset(object): def xls(self): """Returns XLS representation of Dataset.""" stream = cStringIO.StringIO() - + wb = xlwt.Workbook() ws = wb.add_sheet(self.title if self.title else 'Tabbed Dataset') # for row in self._package(dicts=False): @@ -171,12 +171,13 @@ class Dataset(object): wb.save(stream) return stream.getvalue() - + def append(self, row): """Adds a row to the end of Dataset""" self._validate(row) self._data.append(tuple(row)) + def index(self, i, row): """Inserts a row at given position in Dataset""" self._validate(row) @@ -187,32 +188,75 @@ class Dataset(object): # todo: accpept string if headers, or index nubmer pass - def save(self, filename=None, format=None): """Saves dataset""" if not format: format = filename.split('.')[-1].lower() # set format from filename - + if format not in FILE_EXTENSIONS: raise UnsupportedFormat - + # note export format # open file, save the bitch - + def export(self): """Exports Dataset to given filename or file-object.""" + pass + + +class DataBook(object): + """A book of Dataset objects. + Currently, this exists only for XLS workbook support. + """ + + def __init__(self): + self._datasets = [] + def add_book(self, dataset): + """Add given .""" + if type(dataset) is Dataset: + self._datasets.append(dataset) + else: + raise InvalidDatasetType + + @property + def size(self): + """The number of the Datasets within DataBook.""" + return len(self._datasets) + + + @property + def xls(self): + """Returns XLS representation of DataBook.""" + + stream = cStringIO.StringIO() + wb = xlwt.Workbook() + + for dset in self._datasets: + ws = wb.add_sheet(dset.title if dset.title else 'Tabbed Dataset %s' % (int(random.random() * 100000000))) + + #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) + + wb.save(stream) + return stream.getvalue() + + + +class InvalidDatasetType(Exception): + "Only Datasets can be added to a DataBook" + class InvalidDimensions(Exception): "Invalid size" - class UnsupportedFormat(NotImplementedError): "Format is not supported" - def source(src=None, file=None, filename=None): """docstring for import""" diff --git a/tablib/tests/tests.py b/tablib/tests/tests.py index 55fa083..42b6110 100644 --- a/tablib/tests/tests.py +++ b/tablib/tests/tests.py @@ -10,17 +10,40 @@ data = [ data = tablib.Dataset(*data, headers=headers) -#print data[1] -data.append(['kenneth' ,'reitz', 4.3]) +data.append(['Kenneth' ,'Reitz', 4.3]) +#print '***WITH HEADERS***' -#print data.digest() +#print 'First Names:\n', +#print data['first_name'] +#print '\nYAML:' #print data.yaml +# +#print 'JSON:' #print data.json +# +#print '\nCSV:' +#print data.csv +# +# +#print '***AND WITHOUT HEADERS***' +# +#data.headers = None +# +#print '\nYAML:' +#print data.yaml +# +#print 'JSON:' +#print data.json +# +#print '\nCSV:' +#print data.csv + +book = tablib.DataBook() +book.add_book(data) +book.add_book(data) + +print book.xls + -data.headers = None -print data.csv -#print len(data.xls) -print data.yaml -print data.json
\ No newline at end of file |
