summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2010-09-08 18:06:25 -0400
committerKenneth Reitz <me@kennethreitz.com>2010-09-08 18:06:25 -0400
commit310400af5b3696be2cfd2f0816f7f621d945033f (patch)
treeaaaa73230ccf2221ef9fdc19ef2dffdae5a15c69 /tablib
parent9f025dc1112d9b9986566143af45ae5620a8f2c8 (diff)
parentd52537b75b016a9d8128998236badd980848394f (diff)
downloadtablib-310400af5b3696be2cfd2f0816f7f621d945033f.tar.gz
Merge branch 'feature/paged' into develop
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py80
-rw-r--r--tablib/tests/tests.py39
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