Exemple #1
0
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",
        "",
    ]))
Exemple #2
0
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()
Exemple #3
0
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"))
Exemple #4
0
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))
Exemple #5
0
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)
Exemple #6
0
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'))
Exemple #7
0
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'))
Exemple #8
0
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",
        "",
    ]))
Exemple #9
0
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'))
Exemple #10
0
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()
Exemple #12
0
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'))
Exemple #13
0
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'))
Exemple #14
0
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'))
Exemple #15
0
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()
Exemple #16
0
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'))
Exemple #17
0
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'))