diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2011-01-22 18:35:34 -0500 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2011-01-22 18:35:34 -0500 |
| commit | 1852624a7ebe88eba70b16eb6ea7c5032ec23346 (patch) | |
| tree | cc8a67568ba1bf49a2d7fb2afa48911acb6e87e0 | |
| parent | 34415b89b858075323b7a2d034c06b57dd26bdc7 (diff) | |
| parent | f81dc41a57e19926868efa036bdb9e862cd3bbbb (diff) | |
| download | tablib-1852624a7ebe88eba70b16eb6ea7c5032ec23346.tar.gz | |
Merge pull request #28 from cswegger/tablib
---
This patch provides simple column-based sorting to tablib. A (passing) unit-test is also included.
| -rw-r--r-- | tablib/core.py | 20 | ||||
| -rwxr-xr-x | test_tablib.py | 15 |
2 files changed, 35 insertions, 0 deletions
diff --git a/tablib/core.py b/tablib/core.py index c7e9dd5..5727a69 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -10,6 +10,7 @@ """ from copy import copy +from operator import itemgetter from tablib import formats @@ -528,6 +529,25 @@ class Dataset(object): return _dset + def sort(self, col, reverse=False): + + """Sort a :class:`Dataset` by a specific column. The order can be + reversed by setting ``reverse`` to ``True``. Requires headers to be + set. Returns a new :class:`Dataset` instance where columns have been + sorted.""" + + if not self.headers: + raise HeadersNeeded + + _sorted = sorted(self.dict, key=itemgetter(col), reverse=reverse) + _dset = Dataset(headers=self.headers) + + for item in _sorted: + row = [item[key] for key in self.headers] + _dset.append(row=row) + + return _dset + def transpose(self): """Transpose a :class:`Dataset`, turning rows into columns and vice versa, returning a new ``Dataset`` instance. The first row of the diff --git a/test_tablib.py b/test_tablib.py index 2d1f6b4..15630f2 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -425,7 +425,22 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(column_stacked[0], ("John", "Adams", 90, "John", "Adams", 90)) + def test_sorting(self): + """Sort columns.""" + + sorted_data = self.founders.sort(col="first_name") + + first_row = sorted_data[0] + second_row = sorted_data[2] + third_row = sorted_data[1] + expected_first = self.founders[1] + expected_second = self.founders[2] + expected_third = self.founders[0] + + self.assertEqual(first_row, expected_first) + self.assertEqual(second_row, expected_second) + self.assertEqual(third_row, expected_third) def test_wipe(self): """Purge a dataset.""" |
