summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Ourisman <josh@joshourisman.com>2010-10-01 16:17:04 -0400
committerJosh Ourisman <josh@joshourisman.com>2010-10-01 16:17:04 -0400
commit149bafa97b3c93b5116090d2834f0c19e6face95 (patch)
tree92093fdfb234913153fed618ca9947ff8423023b
parent9f7fec23793b25c7aeffcee4186d6009dc816cca (diff)
downloadtablib-149bafa97b3c93b5116090d2834f0c19e6face95.tar.gz
added ability to append new column passing a callable as the value that will be applied to every row; w/ test
-rw-r--r--tablib/core.py9
-rwxr-xr-xtest_tablib.py7
2 files changed, 16 insertions, 0 deletions
diff --git a/tablib/core.py b/tablib/core.py
index 8f74975..dfb8027 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -177,6 +177,15 @@ class Dataset(object):
self._validate(row)
self._data.append(tuple(row))
elif col is not None:
+ col = list(col)
+ if self.headers:
+ header = [col.pop(0)]
+ else:
+ header = []
+ if len(col) == 1 and callable(col[0]):
+ col = map(col[0], self._data)
+ col = tuple(header + col)
+
self._validate(col=col)
if self.headers:
diff --git a/test_tablib.py b/test_tablib.py
index 67b693d..a315642 100755
--- a/test_tablib.py
+++ b/test_tablib.py
@@ -102,6 +102,13 @@ class TablibTestCase(unittest.TestCase):
self.assertRaises(tablib.InvalidDimensions, data.append, col=new_col)
+ def test_add_callable_column(self):
+ """Verify adding column with values specified as callable."""
+ new_col = ['first_again', lambda x: x[0]]
+ self.founders.append(col=new_col)
+
+ self.assertTrue(map(lambda x: x[0] == x[-1], self.founders))
+
def test_header_slicing(self):
"""Verify slicing by headers."""