Skip to content

Commit ea3500f

Browse files
author
Alan Christie
committed
- TypedColumnReader now detects duplicate column names
- Moved to v2.4.1
1 parent f2f8fe8 commit ea3500f

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

src/python/pipelines_utils/TypedColumnReader.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,10 @@ def _handle_hdr(self, hdr):
228228
if len(name) == 0:
229229
raise ContentError(column_number, self._c_reader.line_num,
230230
cell, 'Column name is empty')
231+
if name in self._column_names:
232+
raise ContentError(column_number, self._c_reader.line_num,
233+
name, 'Duplicate column name')
234+
231235
if len(cell_parts) == 2:
232236
column_type = cell_parts[1].lower()
233237
if column_type not in CONVERTERS:

src/python/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_long_description():
2222
setup(
2323

2424
name='im-pipelines-utils',
25-
version='2.4.0',
25+
version='2.4.1',
2626
author='Alan Christie',
2727
author_email='[email protected]',
2828
url='https://github.com/InformaticsMatters/pipelines-utils',

src/python/test/python2_3/pipelines_utils/test_TypedColumnReader.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,29 @@ def test_basic_example_a_with_supplied_header(self):
4040
self.assertEqual(2, num_lines)
4141
csv_file.close()
4242

43+
def test_basic_example_a_with_duplicate_column_names(self):
44+
"""Test loading of a simple CSV file with a provided header
45+
that contains duplicate names
46+
"""
47+
test_file = os.path.join(DATA_DIR, 'TypedCsvReader.example.a-no-header.csv')
48+
csv_file = open(test_file)
49+
test_file = TypedColumnReader.TypedColumnReader(csv_file,
50+
column_sep=',',
51+
header='one,one,three,four')
52+
num_lines = 0
53+
got_exception = False
54+
try:
55+
for _ in test_file:
56+
num_lines += 1
57+
except TypedColumnReader.ContentError as e:
58+
self.assertEqual(2, e.column)
59+
self.assertEqual(0, e.row)
60+
self.assertEqual('one', e.value)
61+
got_exception = True
62+
self.assertTrue(got_exception)
63+
self.assertEqual(0, num_lines)
64+
csv_file.close()
65+
4366
def test_basic_example_a_gzip(self):
4467
"""Test loading of a simple CSV file (gzipped)
4568
"""
@@ -65,7 +88,7 @@ def test_basic_example_b_unknown_type(self):
6588
num_lines += 1
6689
except TypedColumnReader.UnknownTypeError as e:
6790
self.assertEqual(4, e.column)
68-
self.assertAlmostEqual('unknown-type', e.column_type)
91+
self.assertEqual('unknown-type', e.column_type)
6992
got_exception = True
7093
self.assertTrue(got_exception)
7194
self.assertEqual(0, num_lines)
@@ -85,7 +108,7 @@ def test_basic_example_c_too_many_colons(self):
85108
except TypedColumnReader.ContentError as e:
86109
self.assertEqual(4, e.column)
87110
self.assertEqual(1, e.row)
88-
self.assertAlmostEqual('four:unknown-type:too-many-colons', e.value)
111+
self.assertEqual('four:unknown-type:too-many-colons', e.value)
89112
got_exception = True
90113
self.assertTrue(got_exception)
91114
self.assertEqual(0, num_lines)
@@ -105,8 +128,8 @@ def test_basic_example_d_wrong_type(self):
105128
except TypedColumnReader.ContentError as e:
106129
self.assertEqual(1, e.column)
107130
self.assertEqual(2, e.row)
108-
self.assertAlmostEqual('A string', e.value)
109-
self.assertAlmostEqual('Does not comply with column type', e.message)
131+
self.assertEqual('A string', e.value)
132+
self.assertEqual('Does not comply with column type', e.message)
110133
got_exception = True
111134
self.assertTrue(got_exception)
112135
self.assertEqual(0, num_lines)
@@ -138,7 +161,7 @@ def test_basic_example_d_too_many_values(self):
138161
except TypedColumnReader.ContentError as e:
139162
self.assertEqual(3, e.column)
140163
self.assertEqual(2, e.row)
141-
self.assertAlmostEqual('Too many values', e.message)
164+
self.assertEqual('Too many values', e.message)
142165
got_exception = True
143166
self.assertTrue(got_exception)
144167
self.assertEqual(0, num_lines)

0 commit comments

Comments
 (0)