summaryrefslogtreecommitdiff
path: root/tablib/core.py
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2010-09-25 17:18:51 -0400
committerKenneth Reitz <me@kennethreitz.com>2010-09-25 17:18:51 -0400
commit9f26c23eb50f6d00e04b4fe4bd5e5e98b512cfbe (patch)
tree043f062e3eeb93939ec368dcd8c40b0e63b418a8 /tablib/core.py
parentdc21825f346e2c422c7a3ebc180cce62726aaaa7 (diff)
parent8136f4b09eac5ed160fd49ec70f2c1338df6ec8d (diff)
downloadtablib-0.8.0.tar.gz
Merge branch 'release/0.8.0'v0.8.0
Diffstat (limited to 'tablib/core.py')
-rw-r--r--tablib/core.py170
1 files changed, 70 insertions, 100 deletions
diff --git a/tablib/core.py b/tablib/core.py
index 0167c34..cdaf0d5 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -1,28 +1,14 @@
# -*- coding: utf-8 -*-
-# _____ ______ ______ _________
-# __ /_______ ____ /_ ___ /_ _____ ______ /
-# _ __/_ __ `/__ __ \__ __ \_ _ \_ __ /
-# / /_ / /_/ / _ /_/ /_ /_/ // __// /_/ /
-# \__/ \__,_/ /_.___/ /_.___/ \___/ \__,_/
+""" Tablib - Core Library.
+"""
+from tablib.formats import FORMATS as formats
-import csv
-import cStringIO
-import random
-import simplejson as json
-import xlwt
-import yaml
-
-from helpers import *
-
-
-# __all__ = ['Dataset', 'DataBook']
-
-__name__ = 'tablib'
-__version__ = '0.7.1'
-__build__ = 0x000701
+__title__ = 'tablib'
+__version__ = '0.8.0'
+__build__ = 0x000800
__author__ = 'Kenneth Reitz'
__license__ = 'MIT'
__copyright__ = 'Copyright 2010 Kenneth Reitz'
@@ -32,22 +18,20 @@ class Dataset(object):
"""Epic Tabular-Dataset object. """
def __init__(self, *args, **kwargs):
- self._data = None
- self._saved_file = None
- self._saved_format = None
self._data = list(args)
self.__headers = None
try:
self.headers = kwargs['headers']
- except KeyError, why:
+ except KeyError:
self.headers = None
try:
self.title = kwargs['title']
- except KeyError, why:
+ except KeyError:
self.title = None
+ self._register_formats()
def __len__(self):
return self.height
@@ -79,6 +63,20 @@ class Dataset(object):
except AttributeError:
return '<dataset object>'
+
+ @classmethod
+ def _register_formats(cls):
+ """Adds format properties."""
+ for fmt in formats:
+ try:
+ try:
+ setattr(cls, fmt.title, property(fmt.export_set, fmt.import_set))
+ except AttributeError:
+ setattr(cls, fmt.title, property(fmt.export_set))
+
+ except AttributeError:
+ pass
+
def _validate(self, row=None, col=None, safety=False):
"""Assures size of every row in dataset is of proper proportions."""
@@ -113,6 +111,7 @@ class Dataset(object):
return data
+
@property
def height(self):
"""Returns the height of the Dataset."""
@@ -124,12 +123,13 @@ class Dataset(object):
"""Returns the width of the Dataset."""
try:
return len(self._data[0])
- except IndexError, why:
+ except IndexError:
try:
return len(self.headers)
- except TypeError, e:
+ except TypeError:
return 0
-
+
+
@property
def headers(self):
"""Headers property."""
@@ -143,7 +143,7 @@ class Dataset(object):
if collection:
try:
self.__headers = list(collection)
- except TypeError, why:
+ except TypeError:
raise TypeError
else:
self.__headers = None
@@ -154,42 +154,21 @@ class Dataset(object):
"""Returns python dict of Dataset."""
return self._package()
-
- @property
- def json(self):
- """Returns JSON representation of Dataset."""
- return json.dumps(self.dict)
-
- @property
- def yaml(self):
- """Returns YAML representation of Dataset."""
- return yaml.dump(self.dict)
-
- @property
- def csv(self):
- """Returns CSV representation of Dataset."""
- stream = cStringIO.StringIO()
- _csv = csv.writer(stream)
-
- for row in self._package(dicts=False):
- _csv.writerow(row)
-
- return stream.getvalue()
-
- @property
- def xls(self):
- """Returns XLS representation of Dataset."""
-
- wb = xlwt.Workbook(encoding='utf8')
- ws = wb.add_sheet(self.title if self.title else 'Tabbed Dataset')
-
- for i, row in enumerate(self._package(dicts=False)):
- for j, col in enumerate(row):
- ws.write(i, j, col)
-
- stream = cStringIO.StringIO()
- wb.save(stream)
- return stream.getvalue()
+
+ @dict.setter
+ def dict(self, pickle):
+ """Returns python dict of Dataset."""
+ if not len(pickle):
+ return
+ if isinstance(pickle[0], list):
+ for row in pickle:
+ self.append(row)
+ elif isinstance(pickle[0], dict):
+ self.headers = pickle[0].keys()
+ for row in pickle:
+ self.append(row.values())
+ else:
+ raise UnsupportedFormat
def append(self, row=None, col=None):
@@ -222,6 +201,12 @@ class Dataset(object):
self._data.insert(i, tuple(row))
elif col:
pass
+
+
+ def wipe(self):
+ """Erases all data from Dataset."""
+ self._data = list()
+ self.__headers = None
class Databook(object):
@@ -231,6 +216,7 @@ class Databook(object):
def __init__(self, sets=[]):
self._datasets = sets
+ self._register_formats()
def __repr__(self):
@@ -239,9 +225,26 @@ class Databook(object):
except AttributeError:
return '<databook object>'
+ def wipe(self):
+ """Wipe book clean."""
+ self._datasets = []
+
+ @classmethod
+ def _register_formats(cls):
+ """Adds format properties."""
+ for fmt in formats:
+ try:
+ try:
+ setattr(cls, fmt.title, property(fmt.export_book, fmt.import_book))
+ except AttributeError:
+ setattr(cls, fmt.title, property(fmt.export_book))
+
+ except AttributeError:
+ pass
+
def add_sheet(self, dataset):
- """Add given dataset ."""
+ """Adds given dataset."""
if type(dataset) is Dataset:
self._datasets.append(dataset)
else:
@@ -249,6 +252,7 @@ class Databook(object):
def _package(self):
+ """Packages Databook for delivery."""
collector = []
for dset in self._datasets:
collector.append(dict(
@@ -263,40 +267,6 @@ class Databook(object):
"""The number of the Datasets within DataBook."""
return len(self._datasets)
- @property
- def xls(self):
- """Returns XLS representation of DataBook."""
-
-
- wb = xlwt.Workbook(encoding='utf8')
-
- for i, dset in enumerate(self._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)
-
-
- stream = cStringIO.StringIO()
- wb.save(stream)
- return stream.getvalue()
-
-
- @property
- def json(self):
- """Returns JSON representation of Databook."""
-
- return json.dumps(self._package())
-
-
- @property
- def yaml(self):
- """Returns YAML representation of Databook."""
-
- return yaml.dump(self._package())
-
class InvalidDatasetType(Exception):