コード例 #1
0
def test_read_csv_iobase(tmp_path, src, encoding, expected):
    if sys.version_info < (3, 6):
        tmp_path = pathlib.Path(str(tmp_path))

    buf = (io.BytesIO if isinstance(src, bytes) else io.StringIO)(src)

    kwargs = {'encoding': encoding, 'as_list': True}

    if isinstance(expected, tuple):
        with pytest.raises(expected[0], match=expected[1]):
            read_csv(buf, **kwargs)
        return

    assert read_csv(buf, **kwargs) == expected

    source = tmp_path / 'spam.csv'
    if isinstance(buf, io.TextIOBase):
        assert encoding is None
        with source.open('wt', encoding='utf-8', newline='') as f:
            f.write(src)
        open_kwargs = {'mode': 'rt', 'encoding': 'utf-8', 'newline': ''}
        kwargs['encoding'] = None
    else:
        assert encoding is not None
        source.write_bytes(src)
        open_kwargs = {'mode': 'rb'}

    with source.open(**open_kwargs) as f:
        assert read_csv(f, **kwargs) == expected
コード例 #2
0
def test_roundtrip_csv_autocompress(tmp_path, filename, open_module, raw,
                                    encoding, rows):
    if sys.version_info < (3, 6):
        tmp_path = pathlib.Path(str(tmp_path))

    target = tmp_path / filename

    filename = str(target) if sys.version_info < (3, 6) else target

    import importlib

    open_module = importlib.import_module(open_module)

    with open_module.open(filename, 'wb') as f:
        f.write(raw)

    kwargs = {'encoding': encoding, 'autocompress': True}

    assert read_csv(filename, as_list=True, **kwargs) == rows

    target.unlink()

    result = write_csv(filename, rows, **kwargs)

    assert result.exists()
    assert result.samefile(target)

    assert read_csv(filename, as_list=True, **kwargs) == rows
コード例 #3
0
def test_read_csv_zipfile(tmp_path, raw, encoding, expected):
    if sys.version_info < (3, 6):
        tmp_path = pathlib.Path(str(tmp_path))

    archive = tmp_path / 'spam.zip'
    filename = 'spam.csv'
    with zipfile.ZipFile(archive, 'w') as z,\
         z.open(filename, 'w') as f:
        f.write(raw)

    assert archive.exists()
    assert archive.stat().st_size

    kwargs = {'encoding': encoding, 'as_list': True}

    with zipfile.ZipFile(archive) as z,\
         z.open(filename) as f:
        assert z.namelist() == [filename]
        z.read(filename) == raw
        if isinstance(expected, tuple):
            assert encoding is None
            with pytest.raises(expected[0], match=expected[1]):
                read_csv(f, **kwargs)
            return

        assert read_csv(f, **kwargs) == expected
コード例 #4
0
def test_autocompress_warning(tmp_path):
    if sys.version_info < (3, 6):
        tmp_path = pathlib.Path(str(tmp_path))

    target = tmp_path / 'spam.csv.gz'
    target.touch()

    filename = str(target) if sys.version_info < (3, 6) else target

    with pytest.warns(UserWarning, match=r'suffix'):
        read_csv(filename)
コード例 #5
0
def test_read_csv_filename(tmp_path, raw, encoding, expected):
    if sys.version_info < (3, 6):
        tmp_path = pathlib.Path(str(tmp_path))

    target = tmp_path / 'spam.csv'
    target.write_bytes(raw)

    kwargs = {'encoding': encoding, 'as_list': True}

    if isinstance(expected, tuple):
        with pytest.raises(expected[0], match=expected[1]):
            read_csv(target, **kwargs)
        return

    assert read_csv(target, **kwargs) == expected
コード例 #6
0
def test_read_csv_py2():
    with pytest.raises(NotImplementedError):
        read_csv('spam.csv', encoding='utf-8')