def test_writing_to_a_file(): "Writer should be able to write to a file" # Given a temporary file tmpfile = open('/tmp/test_1.csv', 'w+') # And CSV writer pointing to that tempfile writer = Writer(backend=CSV(delimiter=";"), output=tmpfile) # And some data writer.write([ OrderedDict([("Country", "USA"), ("Revenue", 22222)]), OrderedDict([("Country", "Canada"), ("Revenue", 33333)]), ]) # When the writer gets saved writer.save() # Then the file exists os.path.exists(tmpfile.name).should.be.true expect(open(tmpfile.name).read()).to.equal("\r\n".join([ "Country;Revenue", "USA;22222", "Canada;33333", "", ]))
def test_writer_save(): "Writer should close the buffer upon save" # Given a writer with a mocked backend backend = Mock() writer = Writer(backend) writer.save() backend.buffer.close.assert_called_once()
def test_write_data_with_header_to_csv(): "Writer should write data with header correctly in CSV format" # Given a CSV writer writer = Writer(backend=CSV()) # When we write some data data = [OrderedDict([("Country", "Argentina"), ("Revenue", 14500025)])] writer.write(data) # Then the written to data should match our expectation (expect(writer.buffer.getvalue()) .to.equal("Country,Revenue\r\nArgentina,14500025\r\n"))
def test_writing_too_many_rows_raises_error(context): "Writer should raise an error if we try to write too many rows" backend= XL() writer = Writer(backend=backend, output=context.tmpfile) for index in range(65535): writer.write( [[("Country", "Argentina"), ("Revenue", 14500025)]], ) (writer.write.when .called_with([[("Country", "Argentina"), ("Revenue", 14500025)]]) .should.throw(TooManyRowsError))
def test_writer_writes(): "Writer should write data via the backend.write method" # Given a writer with a mocked backend backend = Mock() writer = Writer(backend) # When I write data data = [[('some awesome key', 'some awesome value')]] writer.write(data) # Then the backend.write should have been called once with # data and writer.buffer backend.write.assert_called_once_with([OrderedDict(data[0])], writer.buffer)
def test_write_data_with_headers_to_xl(context): "Writer should write data with header correctly in XL format" # Given an XL Writer writer = Writer(backend=XL(), output=context.tmpfile) # When we write some data data = [ [("Country", "Argentina"), ("Revenue", 14500025)] ] writer.write(data) # And we save it writer.save() # Then the written to data should match our expectation assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('excel1.xls'))
def test_writing_to_multiple_sheets_in_same_book(context): "Writer should write to multiple sheets in the same book" # Given a backend backend = XL() # And a writer writer = Writer(backend=backend, output=context.tmpfile) # When we write data to Awesome Sheet1 backend.use_sheet('Awesome Sheet1') data = [ [("Country", "Argentina"), ("Revenue", 14500025)] ] writer.write(data) # When we write data to Awesome Sheet2 backend.use_sheet('Awesome Sheet2') data = [ OrderedDict([("Country", "Puerto Rico"), ("Revenue", 2340982)]), OrderedDict([("Country", "Colombia"), ("Revenue", 23409822)]), OrderedDict([("Country", "Brazil"), ("Revenue", 19982793)]), ] writer.write(data) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet2.xls'))
def test_writing_with_nondefault_delimiter_unicode(): "Writer should allow nondefault delimiter (unicode)p" # Given a CSV writer writer = Writer(backend=CSV(delimiter=";")) # When we write some data data = [ OrderedDict([("Country", "Argentina"), ("Revenue", 14500025)]), OrderedDict([("Country", "Brazil"), ("Revenue", 145002495)]), ] writer.write(data) # Then the written to data should match our expectation expect(writer.buffer.getvalue()).to.equal("\r\n".join([ "Country;Revenue", "Argentina;14500025", "Brazil;145002495", "", ]))
def test_write_data_to_xl_specifying_sheet_name(context): "Writer should write data to the sheet specified" # Given a backend backend = XL() # And a writer writer = Writer(backend=backend, output=context.tmpfile) # When we use sheet `Awesome Sheet1` backend.use_sheet('Awesome Sheet1') # And we write some data data = [ [("Country", "Argentina"), ("Revenue", 14500025)] ] writer.write(data) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet1.xls'))
def test_write_data_with_header_and_multiple_rows_to_csv(): ("Writer should write data with header and multiple " "rows correctly in CSV format") # Given a CSV writer writer = Writer(backend=CSV()) # When we write some data data = [ OrderedDict([("Country", "Argentina"), ("Revenue", 14500025)]), OrderedDict([("Country", "Brazil"), ("Revenue", 145002495)]), ] writer.write(data) # Then the written to data should match our expectation expect(writer.buffer.getvalue()).to.equal("\r\n".join([ "Country,Revenue", "Argentina,14500025", "Brazil,145002495", "", ]))
def benchmark_excellent(): from collections import OrderedDict from excellent import Writer, XL output = open("benchmark_excellent.xls", "wb") sheet_manager = XL() excel = Writer(sheet_manager, output) sheet_manager.use_sheet("Sheet1") excel.write(( OrderedDict(( (str(column), value) for column in xrange(COLUMNS) )) for row, value in izip(xrange(ROWS), VALUES) )) excel.save()
def test_writing_multiple_times_to_same_sheet_and_multiple_sheets(context): "Writer can switch between sheets and write multiple times to same sheet" # Given a backend backend = XL() # And a writer writer = Writer(backend=backend, output=context.tmpfile) # And then switch to Awesome Sheet1 and this just adds this sheet backend.use_sheet('Awesome Sheet1') # When we write data to Awesome Sheet2 backend.use_sheet('Awesome Sheet2') data = [ OrderedDict([("Country", "Puerto Rico"), ("Revenue", 2340982)]), ] writer.write(data) backend.use_sheet('Awesome Sheet1') data = [ OrderedDict([("Country", "Argentina"), ("Revenue", 14500025)]) ] writer.write(data) # And switch back to Awesome Sheet 2 to write more data backend.use_sheet('Awesome Sheet2') data = [ OrderedDict([("Country", "Colombia"), ("Revenue", 23409822)]), OrderedDict([("Country", "Brazil"), ("Revenue", 19982793)]), ] writer.write(data) writer.save() # Then the written data to Awesome Sheets 1 and 2 should match assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet2.xls'))
def test_writing_with_bold_works(context): "Writer should be able write things in bold" backend= XL() writer = Writer(backend=backend, output=context.tmpfile) writer.write( [[("Country", "Argentina"), ("Revenue", 14500025)]], bold=True, ) writer.write( [[("Country", "Puerto Rico"), ("Revenue", 2340982)]] ) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet4.xls'))
def test_writing_with_format_strings(context): "Writer should be able write things with format strings" backend= XL() writer = Writer(backend=backend, output=context.tmpfile) writer.write( [[("Country", "Argentina"), ("Revenue", 14500025)]], ) writer.write( [[("Country", "Puerto Rico"), ("Revenue", 2340982)]], format_string='#,##0', ) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet6.xls'))
def benchmark_excellent(): from collections import OrderedDict from excellent import Writer, XL output = open("benchmark_excellent.xls", "wb") sheet_manager = XL() excel = Writer(sheet_manager, output) sheet_manager.use_sheet("Sheet1") excel.write((OrderedDict(((str(column), value) for column in range(COLUMNS))) for row, value in zip(range(ROWS), VALUES))) excel.save()
def test_writing_with_default_style_works(context): "Writer should be able to take a default style" style = XFStyle() style.font.bold = True backend= XL(default_style=style) writer = Writer(backend=backend, output=context.tmpfile) writer.write( [[("Country", "Argentina"), ("Revenue", 14500025)]], ) writer.write( [[("Country", "Puerto Rico"), ("Revenue", 2340982)]], bold=False, ) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet4.xls'))
def test_writing_to_same_sheet_multiple_times_without_no_sheet_name(context): "Writer able to write any number of times to the same sheet with no sheet name" # Given a backend backend = XL() # And a writer writer = Writer(backend=backend, output=context.tmpfile) data = [ [("Country", "Argentina"), ("Revenue", 14500025)] ] writer.write(data) data = [ OrderedDict([("Country", "Puerto Rico"), ("Revenue", 2340982)]), OrderedDict([("Country", "Colombia"), ("Revenue", 23409822)]), OrderedDict([("Country", "Brazil"), ("Revenue", 19982793)]), ] writer.write(data) writer.save() # Then the written data should be under Awesome Sheet assert_first_sheets_are_the_same(context.tmpfile.name, LOCAL_FILE('awesome_sheet3.xls'))