diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2010-10-05 17:30:13 -0400 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2010-10-05 17:30:13 -0400 |
| commit | 7c90595364baf4545e451c15346deb81dc5a79f7 (patch) | |
| tree | 18be5884f436d672a02efedaad4e31e0c50d6df1 /tablib | |
| parent | 38ac98fdb2fca1c5197348d9dcfd049c0a65ab86 (diff) | |
| download | tablib-7c90595364baf4545e451c15346deb81dc5a79f7.tar.gz | |
Heavy documentation update.
Diffstat (limited to 'tablib')
| -rw-r--r-- | tablib/core.py | 110 |
1 files changed, 106 insertions, 4 deletions
diff --git a/tablib/core.py b/tablib/core.py index aa840ad..ad8ef8f 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -1,6 +1,12 @@ # -*- coding: utf-8 -*- +""" + tablib.core + ~~~~~~~~~~~ + + This module implements the central tablib objects. -""" Tablib - Core Library. + :copyright: (c) 2010 by Kenneth Reitz. + :license: MIT, see LICENSE for more details. """ from tablib.formats import FORMATS as formats @@ -15,7 +21,88 @@ __copyright__ = 'Copyright 2010 Kenneth Reitz' class Dataset(object): - """Epic Tabular-Dataset object. """ + """The tablib Dataset object is the heart of tablib. It provides all core + functionality. + + Usually you create a :class:`Dataset` instance in your main module, and append + rows and columns as you collect data. :: + + data = tablib.Dataset() + data.headers = ('name', 'age') + + for (name, age) in some_collector(): + data.append((name, age)) + + You can also set rows and headers upon instantiation. This is useful if dealing + with dozens or hundres of :class:`Dataset` objects. :: + + headers = ('first_name', 'last_name') + data = [('John', 'Adams'), ('George', 'Washington')] + + data = tablib.Dataset(*data, headers=headers) + + + :param \*args: (optional) list of rows to populate Dataset + :param headers: (optional) list strings for Dataset header row + + + .. admonition:: About the Format Attributes + + If you look at the code, the various output/import formats are not + defined within the itself. To add support for a new format, see + :ref:`Adding New Formats`. + + .. attribute:: csv + + A CSV representation of the Dataset object. The top row will contain + headers, if they have been set. Otherwise, the top row will contain + the first row of the dataset. + + A dataset object can also be imported by setting the `Dataset.csv` attribute: :: + + data = tablib.Dataset() + data.csv = 'age, first_name, last_name\\n90, John, Adams' + + Import assumes (for now) that headers exist. + + + .. attribute:: dict + + An native Python representation of the Dataset object. If headers have been + set, a list of Python dictionaries will be returned. If no headers have been + set, a list of tuples (rows) will be returned instead. + + A dataset object can also be imported by setting the `Dataset.dict` attribute: :: + + data = tablib.Dataset() + data.dict = [{'age': 90, 'first_name': 'Kenneth', 'last_name': 'Reitz'}] + + + .. attribute:: xls + + An Excel Spreadsheet representation of the Dataset object, including + :ref:`seperators`. + + *Note:* `Dataset.xls` contains binary data, so make sure to write in binary + mode:: + + with open('output.xls', 'wb') as f: + f.write(data.xls) + + + .. attribute:: yaml + + A YAML representation of the Dataset object. If headers have been + set, a YAML list of objects will be returned. If no headers have + been set, a YAML list of lists (rows) will be returned instead. + + A dataset object can also be imported by setting the `Dataset.json` attribute: :: + + data = tablib.Dataset() + data.yaml = '- {age: 90, first_name: John, last_name: Adams}' + + Import assumes (for now) that headers exist. + """ def __init__(self, *args, **kwargs): self._data = list(args) @@ -155,19 +242,34 @@ class Dataset(object): @property def dict(self): - """Returns python dict of Dataset.""" + """A JSON representation of the Dataset object. If headers have been + set, a JSON list of objects will be returned. If no headers have + been set, a JSON list of lists (rows) will be returned instead. + + A dataset object can also be imported by setting the `Dataset.json` attribute: :: + + data = tablib.Dataset() + data.json = '[{"last_name": "Adams","age": 90,"first_name": "John"}]' + + """ return self._package() @dict.setter def dict(self, pickle): - """Returns python dict of Dataset.""" + if not len(pickle): return + + # if list of rows if isinstance(pickle[0], list): + self.wipe() for row in pickle: self.append(row) + + # if list of objects elif isinstance(pickle[0], dict): + self.wipe() self.headers = pickle[0].keys() for row in pickle: self.append(row.values()) |
