diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2011-01-31 00:58:27 -0500 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2011-01-31 00:58:27 -0500 |
| commit | 695e8c5af7a0d66c6ea96dec535535b0e1ac25b0 (patch) | |
| tree | 5cb6de300cc64b2f0eb7a721bec883acabd50d3a | |
| parent | 0797ec67d4a4c6c145d86d0b7dca9d3b03c6d8e6 (diff) | |
| parent | 1852624a7ebe88eba70b16eb6ea7c5032ec23346 (diff) | |
| download | tablib-695e8c5af7a0d66c6ea96dec535535b0e1ac25b0.tar.gz | |
Merge branch 'feature/sorting' into release/0.9.3
| -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 6eb57db..19eec3e 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.""" |
