Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_parse_column_identifiers(self):
self.assertEqual([2, 0, 1], parse_column_identifiers('i_work_here,1,name', self.headers))
self.assertEqual([2, 1, 1], parse_column_identifiers('i_work_here,1,name', self.headers, column_offset=0))
def test_range_notation(self):
self.assertEqual([0, 1, 2], parse_column_identifiers('1:3', self.headers))
self.assertEqual([1, 2, 3], parse_column_identifiers('1:3', self.headers, column_offset=0))
self.assertEqual([1, 2, 3], parse_column_identifiers('2-4', self.headers))
self.assertEqual([2, 3, 4], parse_column_identifiers('2-4', self.headers, column_offset=0))
self.assertEqual([0, 1, 2, 3], parse_column_identifiers('1,2:4', self.headers))
self.assertEqual([1, 2, 3, 4], parse_column_identifiers('1,2:4', self.headers, column_offset=0))
self.assertEqual([4, 2, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers))
self.assertEqual([4, 3, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers, column_offset=0))
def test_range_notation(self):
self.assertEqual([0, 1, 2], parse_column_identifiers('1:3', self.headers))
self.assertEqual([1, 2, 3], parse_column_identifiers('1:3', self.headers, column_offset=0))
self.assertEqual([1, 2, 3], parse_column_identifiers('2-4', self.headers))
self.assertEqual([2, 3, 4], parse_column_identifiers('2-4', self.headers, column_offset=0))
self.assertEqual([0, 1, 2, 3], parse_column_identifiers('1,2:4', self.headers))
self.assertEqual([1, 2, 3, 4], parse_column_identifiers('1,2:4', self.headers, column_offset=0))
self.assertEqual([4, 2, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers))
self.assertEqual([4, 3, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers, column_offset=0))
def test_range_notation_open_ended(self):
self.assertEqual([0, 1, 2], parse_column_identifiers(':3', self.headers))
target = list(range(3, len(self.headers))) # protect against devs adding to self.headers
target.insert(0, 0)
self.assertEqual(target, parse_column_identifiers('1,4:', self.headers))
self.assertEqual(list(range(0, len(self.headers))), parse_column_identifiers('1:', self.headers))
def test_parse_column_identifiers(self):
self.assertEqual([2, 0, 1], parse_column_identifiers('i_work_here,1,name', self.headers))
self.assertEqual([2, 1, 1], parse_column_identifiers('i_work_here,1,name', self.headers, column_offset=0))
def test_range_notation(self):
self.assertEqual([0, 1, 2], parse_column_identifiers('1:3', self.headers))
self.assertEqual([1, 2, 3], parse_column_identifiers('1:3', self.headers, column_offset=0))
self.assertEqual([1, 2, 3], parse_column_identifiers('2-4', self.headers))
self.assertEqual([2, 3, 4], parse_column_identifiers('2-4', self.headers, column_offset=0))
self.assertEqual([0, 1, 2, 3], parse_column_identifiers('1,2:4', self.headers))
self.assertEqual([1, 2, 3, 4], parse_column_identifiers('1,2:4', self.headers, column_offset=0))
self.assertEqual([4, 2, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers))
self.assertEqual([4, 3, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers, column_offset=0))
def test_range_notation(self):
self.assertEqual([0, 1, 2], parse_column_identifiers('1:3', self.headers))
self.assertEqual([1, 2, 3], parse_column_identifiers('1:3', self.headers, column_offset=0))
self.assertEqual([1, 2, 3], parse_column_identifiers('2-4', self.headers))
self.assertEqual([2, 3, 4], parse_column_identifiers('2-4', self.headers, column_offset=0))
self.assertEqual([0, 1, 2, 3], parse_column_identifiers('1,2:4', self.headers))
self.assertEqual([1, 2, 3, 4], parse_column_identifiers('1,2:4', self.headers, column_offset=0))
self.assertEqual([4, 2, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers))
self.assertEqual([4, 3, 5], parse_column_identifiers('more-header-values,3,stuff', self.headers, column_offset=0))
def main(self):
if self.args.names_only:
self.print_column_names()
return
table = agate.Table.from_csv(
self.input_file,
skip_lines=self.args.skip_lines,
sniff_limit=self.args.sniff_limit,
column_types=self.get_column_types(),
**self.reader_kwargs
)
column_ids = parse_column_identifiers(
self.args.columns,
table.column_names,
self.get_column_offset()
)
table = table.order_by(column_ids, reverse=self.args.reverse)
table.to_csv(self.output_file, **self.writer_kwargs)
try:
if no_header_row:
# Peek at a row to infer column names from, and put it back on top
row = next(rows)
rows = itertools.chain([row], rows)
headers = make_default_headers(len(row))
else:
headers = next(rows)
except StopIteration:
# The file is `/dev/null`.
headers = []
pass
if no_header_row or column_ids:
column_ids = parse_column_identifiers(column_ids, headers, column_offset)
headers = [headers[c] for c in column_ids]
else:
column_ids = range(len(headers))
data_columns = [[] for c in headers]
width = len(data_columns)
for i, row in enumerate(rows):
j = 0
for j, d in enumerate(row):
try:
data_columns[j].append(row[column_ids[j]].strip())
except IndexError:
# Non-rectangular data is truncated
break
if not self.args.no_header_row:
count -= 1
self.output_file.write('Row count: %i\n' % count)
return
table = agate.Table.from_csv(
self.input_file,
skip_lines=self.args.skip_lines,
sniff_limit=self.args.sniff_limit,
**self.reader_kwargs
)
column_ids = parse_column_identifiers(
self.args.columns,
table.column_names,
self.get_column_offset()
)
kwargs = {}
if self.args.freq_count:
kwargs['freq_count'] = self.args.freq_count
# Output a single stat
if operations:
if len(column_ids) == 1:
self.print_one(table, column_ids[0], operations[0], label=False, **kwargs)
else:
for column_id in column_ids: