Skip to content

Commit

Permalink
Implement Table.rename. Closes wireservice#389
Browse files Browse the repository at this point in the history
  • Loading branch information
nbedi committed Dec 5, 2015
1 parent 99c1b25 commit 1508fef
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
26 changes: 26 additions & 0 deletions agate/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,32 @@ def _fork(self, rows, column_names=None, column_types=None, row_names=None):

return Table(rows, column_names, column_types, row_names=row_names, _is_fork=True)

def _rename(self, column_names=None, row_names=None):
"""
Creates a new table, but uses fork so rows are preserved. Either columns
or rows can optionally be renamed. column_names can be either a sequence
or a dict of replacements. row_names matches interface of Table().
:param column_names:
New column names for the renamed table. If not specified, fork will
use this table's column names.
:param row_names:
New row names for the renamed table. If not specified, fork will use
this table's row names.
"""
if column_names is None:
column_names = self._column_names

if row_names is None:
row_names = self._row_names

if isinstance(column_names, dict):
names_from_dict = [column_names[name] if name in column_names else name for name in self.column_names]

return self._fork(self.rows, names_from_dict, self._column_types, row_names=row_names)
else:
return self._fork(self.rows, column_names, self._column_types, row_names=row_names)

@classmethod
def from_csv(cls, path, column_names=None, column_types=None, row_names=None, header=True, **kwargs):
"""
Expand Down
16 changes: 16 additions & 0 deletions tests/test_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -1569,3 +1569,19 @@ def test_compute_creates_rows(self):
self.assertIsNot(table2.rows[0], table3.rows[0])
self.assertNotEqual(table2.rows[0], table3.rows[0])
self.assertSequenceEqual(table.rows[0], (1, 4, 'a'))

def test_rename(self):
table = Table(self.rows, self.column_names, self.column_types)
table2 = table._rename(row_names=['a','b','c'])
table3 = table._rename(column_names=['d','e','f'])

self.assertSequenceEqual(table2.row_names, ['a','b','c'])
self.assertSequenceEqual(table2.column_names, self.column_names)
self.assertIs(table3.row_names, None)
self.assertSequenceEqual(table3.column_names, ['d','e','f'])

def test_rename_column_names_dict(self):
table = Table(self.rows, self.column_names, self.column_types)
table2 = table._rename(column_names={'two': 'second'})

self.assertSequenceEqual(table2.column_names, ['one','second','three'])

0 comments on commit 1508fef

Please sign in to comment.