def test_tabulizer_header_list(self): ''' Basic tests for tabulizer.header_list() ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] headers_2 = {'a': 'An eh', 'b': 'A bee'} columns_2 = ['a', 'b'] # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer(data=data_2x2) self.assertEqual(tab._header_list(), ['a', 'b']) self.assertEqual(tab._header_list(columns=['a', 'b']), ['a', 'b']) self.assertEqual(tab._header_list(columns=['a']), ['a']) self.assertEqual(tab._header_list(columns=['c']), ['c']) self.assertEqual(tab._header_list(columns=['a', 'b', 'c']), ['a', 'b', 'c']) # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) self.assertEqual(tab._header_list(), ['An eh', 'A bee']) self.assertEqual(tab._header_list(columns=['a', 'b']), ['An eh', 'A bee']) self.assertEqual(tab._header_list(columns=['a']), ['An eh']) self.assertEqual(tab._header_list(columns=['c']), ['c']) self.assertEqual(tab._header_list(columns=['a', 'b', 'c']), ['An eh', 'A bee', 'c'])
def test_tabulizer_tsv_load(self): ''' Basic tests for tabulizer.tsv_load(), and implicitly of tabulizer.sv_load. ''' tsvfile1 = os.path.join(self.tmpdir, "sample1.tsv") with open(tsvfile1, 'w') as fp: fp.write("A\tB\tC\n") fp.write("Apple\tBanana\tCherry\n") fp.write("Ant\tBat\tCat\n") tab = tabulizer.Tabulizer() tab.tsv_load(tsvfile1) # - - - - - - - - - - - - - - - - - - - - self.assertEqual(len(tab.data), 2) self.assertEqual(tab.headers, {'A': 'A', 'B': 'B', 'C': 'C'}) self.assertEqual(tab.columns, ['A', 'B', 'C']) self.assertEqual(len(tab.data[0]), 3) self.assertEqual(len(tab.data[1]), 3) self.assertEqual(tab.data[0]['A'], 'Apple') self.assertEqual(tab.data[1]['A'], 'Ant') self.assertEqual(tab.data[0]['B'], 'Banana') self.assertEqual(tab.data[1]['B'], 'Bat') self.assertEqual(tab.data[0]['C'], 'Cherry') self.assertEqual(tab.data[1]['C'], 'Cat') # - - - - - - - - - - - - - - - - - - - - tsvfile2 = os.path.join(self.tmpdir, "sample1.tsv") with open(tsvfile1, 'w') as fp: fp.write("A\tB\tC\n") fp.write("Apple\t\tCherry\n") fp.write("\n") fp.write("\tBat\tCat\n") tab = tabulizer.Tabulizer() tab.tsv_load(tsvfile1) # - - - - - - - - - - - - - - - - - - - - self.assertEqual(len(tab.data), 2) self.assertEqual(tab.headers, {'A': 'A', 'B': 'B', 'C': 'C'}) self.assertEqual(tab.columns, ['A', 'B', 'C']) self.assertEqual(len(tab.data[0]), 2) self.assertEqual(len(tab.data[1]), 2) self.assertEqual(tab.data[0]['A'], 'Apple') self.assertEqual(tab.data[1]['B'], 'Bat') self.assertEqual(tab.data[0]['C'], 'Cherry') self.assertEqual(tab.data[1]['C'], 'Cat')
def test_tabulizer_init(self): # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] headers_2 = {'a': 'An eh', 'b': 'A bee'} columns_2 = ['a', 'b'] # - - - - - - - - - - - - - - - - - - - - # Empty initialization. # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer() self.assertIsNotNone(tab) self.assertIsNone(tab.data) self.assertIsNone(tab.headers) self.assertIsNone(tab.columns) # - - - - - - - - - - - - - - - - - - - - # All parameter initialization. # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) self.assertIsNotNone(tab) self.assertEqual(tab.data, data_2x2) self.assertEqual(tab.headers, headers_2) self.assertEqual(tab.columns, columns_2) # - - - - - - - - - - - - - - - - - - - - # Mixed parameter initialization. # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer(data_2x2) self.assertIsNotNone(tab) self.assertEqual(tab.data, data_2x2) self.assertEqual(tab.headers, {'a': 'a', 'b': 'b'}) self.assertEqual(tab.columns, ['a', 'b']) # - - - - - - - - - - - - - - - - - - - - tab = tabulizer.Tabulizer(data_2x2, headers_2) self.assertIsNotNone(tab) self.assertEqual(tab.data, data_2x2) self.assertEqual(tab.headers, headers_2) self.assertEqual(tab.columns, ['a', 'b'])
def test_tabulizer_to_worksheet_table(self): ''' Basic tests for tabulizer.to_worksheet_table(). This doesn't actually validate the worksheet, just verify that the methods exist and don't generate bogus errors. ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'c': 6}] headers_2 = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns_2 = ['a', 'b', 'c'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) tmpfile = os.path.join(self.tmpdir, 'temp1.xls') workbook = xlsxwriter.Workbook(tmpfile) # - - - - - - - - - - - - - - - - - - - - worksheet = workbook.add_worksheet('test1') tab.to_worksheet_table(worksheet) worksheet = workbook.add_worksheet('test2') tab.to_worksheet_table(worksheet, columns=['a']) worksheet = workbook.add_worksheet('test3') tab.to_worksheet_table(worksheet, columns=['b']) worksheet = workbook.add_worksheet('test4') tab.to_worksheet_table(worksheet, include_headers=False) workbook.close()
def test_tabulizer_json_loads(self): ''' Basic tests for tabulizer.json_loads(). ''' data = [{ 'A': 'Apple', 'B': 'Banana', 'C': 'Cherry' }, { 'A': 'Ant', 'B': 'Bat', 'C': 'Cat' }] json_string = json.dumps(data) tab = tabulizer.Tabulizer() tab.columns = ['A', 'B', 'C'] tab.json_loads(json_string) # - - - - - - - - - - - - - - - - - - - - self.assertEqual(len(tab.data), 2) self.assertEqual(tab.headers, {'A': 'A', 'B': 'B', 'C': 'C'}) self.assertEqual(tab.columns, ['A', 'B', 'C']) self.assertEqual(len(tab.data[0]), 3) self.assertEqual(len(tab.data[1]), 3) self.assertEqual(tab.data[0]['A'], 'Apple') self.assertEqual(tab.data[1]['A'], 'Ant') self.assertEqual(tab.data[0]['B'], 'Banana') self.assertEqual(tab.data[1]['B'], 'Bat') self.assertEqual(tab.data[0]['C'], 'Cherry') self.assertEqual(tab.data[1]['C'], 'Cat')
def tabulizer(self, informers=None, surveyors=None, report_name=None, report_definition=None): # pylint: disable=bad-continuation '''Generate a report stored in a ``utensils.tabulizer``. See the documentation for ``report()`` for details on arguments and exceptions. Note that ``flat`` is not an allowed argument for this method, as the reports must be flat for this format. Returns: A ``utensils.tabulizer.Tabulizer`` instance. ''' report = self.report(informers=informers, surveyors=surveyors, report_name=report_name, report_definition=report_definition, flat=True) # report() will have confirmed that exactly one of these is # non-None. if report_definition: report_definition_used = report_definition else: report_definition_used = self.report_definitions(report_name)[0] return tabulizer.Tabulizer( data=report, columns=report_definition_used.default_column_order)
def test_tabulizer_row_list(self): ''' Basic tests for tabulizer.row_list() ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] headers_2 = {'a': 'An eh', 'b': 'A bee'} columns_2 = ['a', 'b'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) # - - - - - - - - - - - - - - - - - - - - # All columns. # - - - - - - - - - - - - - - - - - - - - self.assertEqual(tab._row_list({'a': 1, 'b': 2}), ['1', '2']) self.assertEqual(tab._row_list({'a': 1}), ['1', 'None']) self.assertEqual(tab._row_list({'aaa': 1, 'b': 2}), ['None', '2']) # - - - - - - - - - - - - - - - - - - - - # Limited columns. # - - - - - - - - - - - - - - - - - - - - self.assertEqual(tab._row_list({ 'a': 1, 'b': 2 }, columns=['a', 'b']), ['1', '2']) self.assertEqual(tab._row_list({'a': 1, 'b': 2}, columns=['a']), ['1']) self.assertEqual(tab._row_list({ 'a': 1, 'b': 2 }, columns=['c']), ['None']) # - - - - - - - - - - - - - - - - - - - - # Custom placeholder. # - - - - - - - - - - - - - - - - - - - - self.assertEqual(tab._row_list({ 'a': 1, 'b': 2 }, placeholder="X"), ['1', '2']) self.assertEqual(tab._row_list({'a': 1}, placeholder="X"), ['1', 'X']) self.assertEqual(tab._row_list({ 'aaa': 1, 'b': 2 }, placeholder="X"), ['X', '2'])
def _populate_worksheet(worksheet, **kwargs): ''' Parse the indicated data and use tabularize to create a worksheet. ''' if 'data' in kwargs: sheet_data = kwargs['data'] elif 'json' in kwargs: sheet_data = json.loads(kwargs['json']) elif 'jsonfile' in kwargs: with open(kwargs['jsonfile'], 'r') as fptr: sheet_data = json.load(fptr) sheet_headers = kwargs['headers'] if 'headers' in kwargs else None sheet_columns = kwargs['columns'] if 'columns' in kwargs else None placeholder = kwargs['placeholder'] if 'placeholder' in kwargs else None data_tabulizer = tabulizer.Tabulizer(data=sheet_data, columns=sheet_columns, headers=sheet_headers) data_tabulizer.to_worksheet_table(worksheet, placeholder=placeholder)
def test_tabulizer_tsv(self): ''' Basic tests for tabulizer.tsv() ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'c': 6}] headers_2 = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns_2 = ['a', 'b', 'c'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) # - - - - - - - - - - - - - - - - - - - - # No headers. # - - - - - - - - - - - - - - - - - - - - tsv = tab.tsv(include_headers=False) self.assertEqual(len(tsv), 2) self.assertEqual(tsv[0], '1\t2\tNone') self.assertEqual(tsv[1], '3\tNone\t6')
def test_tabulizer_json_load(self): ''' Basic tests for tabulizer.json_load(). ''' data = [{ 'A': 'Apple', 'B': 'Banana', 'C': 'Cherry' }, { 'A': 'Ant', 'B': 'Bat', 'C': 'Cat' }] jsonfile1 = os.path.join(self.tmpdir, "sample1.csv") with open(jsonfile1, 'w') as fp: json.dump(data, fp) tab = tabulizer.Tabulizer() tab.columns = ['A', 'B', 'C'] tab.json_load(jsonfile1) # - - - - - - - - - - - - - - - - - - - - self.assertEqual(len(tab.data), 2) self.assertEqual(tab.headers, {'A': 'A', 'B': 'B', 'C': 'C'}) self.assertEqual(tab.columns, ['A', 'B', 'C']) self.assertEqual(len(tab.data[0]), 3) self.assertEqual(len(tab.data[1]), 3) self.assertEqual(tab.data[0]['A'], 'Apple') self.assertEqual(tab.data[1]['A'], 'Ant') self.assertEqual(tab.data[0]['B'], 'Banana') self.assertEqual(tab.data[1]['B'], 'Bat') self.assertEqual(tab.data[0]['C'], 'Cherry') self.assertEqual(tab.data[1]['C'], 'Cat')
def test_tabulizer_csv(self): ''' Basic tests for tabulizer.csv() ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'c': 6}] headers_2 = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns_2 = ['a', 'b', 'c'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) # - - - - - - - - - - - - - - - - - - - - # Headers and all columns. # - - - - - - - - - - - - - - - - - - - - csv = tab.csv() self.assertEqual(len(csv), 3) self.assertEqual(csv[0], 'An eh,A bee,I see') self.assertEqual(csv[1], '1,2,None') self.assertEqual(csv[2], '3,None,6')
def test_tabulizer_json_dumps(self): # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'c': 6}] headers_2 = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns_2 = ['a', 'b', 'c'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) def sorted(a_list): a_list.sort() return a_list # - - - - - - - - - - - - - - - - - - - - # Headers and all columns. # - - - - - - - - - - - - - - - - - - - - dump = tab.json_dumps() reloaded = json.loads(dump) self.assertEqual(len(reloaded), 2) self.assertEqual(len(reloaded[0]), 3) self.assertEqual(len(reloaded[1]), 3) self.assertEqual(sorted(reloaded[0].keys()), columns_2) self.assertEqual(sorted(reloaded[1].keys()), columns_2) self.assertIn(1, reloaded[0].values()) self.assertIn(2, reloaded[0].values()) self.assertIn(None, reloaded[0].values()) self.assertIn(3, reloaded[1].values()) self.assertIn(6, reloaded[1].values()) self.assertIn(None, reloaded[1].values()) # # - - - - - - - - - - - - - - - - - - - - # # Limited columns. # # - - - - - - - - - - - - - - - - - - - - dump = tab.json_dumps(columns=['a']) reloaded = json.loads(dump) self.assertEqual(len(reloaded), 2) self.assertEqual(len(reloaded[0]), 1) self.assertEqual(len(reloaded[1]), 1) self.assertEqual(sorted(reloaded[0].keys()), ['a']) self.assertEqual(sorted(reloaded[1].keys()), ['a']) self.assertIn(1, reloaded[0].values()) self.assertIn(3, reloaded[1].values()) # # - - - - - - - - - - - - - - - - - - - - # # Custom placeholder. # # - - - - - - - - - - - - - - - - - - - - dump = tab.json_dumps(placeholder='X') reloaded = json.loads(dump) self.assertEqual(len(reloaded), 2) self.assertEqual(len(reloaded[0]), 3) self.assertEqual(len(reloaded[1]), 3) self.assertEqual(sorted(reloaded[0].keys()), columns_2) self.assertEqual(sorted(reloaded[1].keys()), columns_2) self.assertIn(1, reloaded[0].values()) self.assertIn(2, reloaded[0].values()) self.assertIn('X', reloaded[0].values()) self.assertIn(3, reloaded[1].values()) self.assertIn(6, reloaded[1].values()) self.assertIn('X', reloaded[1].values()) # - - - - - - - - - - - - - - - - - - - - # Extra columns. # - - - - - - - - - - - - - - - - - - - - columns_4 = ['a', 'b', 'c', 'dog'] dump = tab.json_dumps(columns=columns_4) reloaded = json.loads(dump) self.assertEqual(len(reloaded), 2) self.assertEqual(len(reloaded[0]), 4) self.assertEqual(len(reloaded[1]), 4) self.assertEqual(sorted(reloaded[0].keys()), columns_4) self.assertEqual(sorted(reloaded[1].keys()), columns_4) self.assertIn(1, reloaded[0].values()) self.assertIn(2, reloaded[0].values()) self.assertIn(None, reloaded[0].values()) self.assertIn(3, reloaded[1].values()) self.assertIn(6, reloaded[1].values()) self.assertIn(None, reloaded[1].values()) # - - - - - - - - - - - - - - - - - - - - dump = tab.json_dumps(placeholder="X", columns=columns_4) reloaded = json.loads(dump) self.assertEqual(len(reloaded), 2) self.assertEqual(sorted(reloaded[0].values()), [1, 2, 'X', 'X']) self.assertEqual(sorted(reloaded[1].values()), [3, 6, 'X', 'X'])
def test_tabulizer_sv_empty_data(self): ''' Basic tests for tabulizer.sv() with "degenerate" values of data. ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - headers = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns = ['a', 'b', 'c'] # - - - - - - - - - - - - - - - - - - - - # Data only. tab_data_empty = tabulizer.Tabulizer(data=[]) sv = tab_data_empty.sv() self.assertEqual(len(sv), 0) sv = tab_data_empty.sv(include_headers=False) self.assertEqual(len(sv), 0) sv = tab_data_empty.sv(columns=['a']) self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a') # Data and columns. tab_data_empty = tabulizer.Tabulizer(data=[], columns=columns) sv = tab_data_empty.sv() self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a,b,c') sv = tab_data_empty.sv(columns=['a']) self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a') sv = tab_data_empty.sv(include_headers=False) self.assertEqual(len(sv), 0) # - - - - - - - - - - - - - - - - - - - - # Data only. tab_data_none = tabulizer.Tabulizer(data=None) sv = tab_data_none.sv() self.assertEqual(len(sv), 0) sv = tab_data_none.sv(include_headers=False) self.assertEqual(len(sv), 0) sv = tab_data_none.sv(columns=['a']) self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a') # Data and columns. tab_data_none = tabulizer.Tabulizer(data=None, columns=columns) sv = tab_data_none.sv() self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a,b,c') sv = tab_data_none.sv(columns=['a']) self.assertEqual(len(sv), 1) self.assertEqual(sv[0], 'a') sv = tab_data_none.sv(include_headers=False) self.assertEqual(len(sv), 0)
def test_tabulizer_sv(self): ''' Basic tests for tabulizer.sv() ''' # - - - - - - - - - - - - - - - - - - - - # Sample data. # - - - - - - - - - - - - - - - - - - - - data_2x2 = [{'a': 1, 'b': 2}, {'a': 3, 'c': 6}] headers_2 = {'a': 'An eh', 'b': 'A bee', 'c': 'I see'} columns_2 = ['a', 'b', 'c'] tab = tabulizer.Tabulizer(data=data_2x2, headers=headers_2, columns=columns_2) # - - - - - - - - - - - - - - - - - - - - # Headers and all columns. # - - - - - - - - - - - - - - - - - - - - sv = tab.sv() self.assertEqual(len(sv), 3) self.assertEqual(sv[0], 'An eh,A bee,I see') self.assertEqual(sv[1], '1,2,None') self.assertEqual(sv[2], '3,None,6') # - - - - - - - - - - - - - - - - - - - - # Limited columns. # - - - - - - - - - - - - - - - - - - - - sv = tab.sv(columns=['a']) self.assertEqual(len(sv), 3) self.assertEqual(sv[0], 'An eh') self.assertEqual(sv[1], '1') self.assertEqual(sv[2], '3') sv = tab.sv(columns=['b']) self.assertEqual(len(sv), 3) self.assertEqual(sv[0], 'A bee') self.assertEqual(sv[1], '2') self.assertEqual(sv[2], 'None') # - - - - - - - - - - - - - - - - - - - - # No headers. # - - - - - - - - - - - - - - - - - - - - sv = tab.sv(include_headers=False) self.assertEqual(len(sv), 2) self.assertEqual(sv[0], '1,2,None') self.assertEqual(sv[1], '3,None,6') # - - - - - - - - - - - - - - - - - - - - # Custom placeholder. # - - - - - - - - - - - - - - - - - - - - sv = tab.sv(include_headers=False, placeholder="X") self.assertEqual(len(sv), 2) self.assertEqual(sv[0], '1,2,X') self.assertEqual(sv[1], '3,X,6') # - - - - - - - - - - - - - - - - - - - - # Extra columns. # - - - - - - - - - - - - - - - - - - - - sv = tab.sv(columns=['a', 'b', 'c', 'dog']) self.assertEqual(len(sv), 3) self.assertEqual(sv[0], 'An eh,A bee,I see,dog') self.assertEqual(sv[1], '1,2,None,None') self.assertEqual(sv[2], '3,None,6,None') sv = tab.sv(include_headers=False, placeholder="X", columns=['a', 'b', 'dog', 'c']) self.assertEqual(len(sv), 2) self.assertEqual(sv[0], '1,2,X,X') self.assertEqual(sv[1], '3,X,X,6')